亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

(4/18)重學Standford_iOS7開發_框架和帶屬性字符串_課程筆記

2019-11-14 18:57:49
字體:
來源:轉載
供稿:網友

第四課(干貨課):

  (最近要復習考試,有點略跟不上節奏,這節課的內容還是比較重要的,仔細理解掌握對今后的編程會有很大影響)

  本節課主要涉及到Foundation和UIKit框架,基本都是概念與API知識,作者主要做一歸納整理。

  0、其他

    a.對象初始化

     ?、偻ㄟ^alloc init(例如[[NSString alloc] initWithFormat:@"%d",2])

      ②通過類方法(例如[NSString StringWithFormat:@"%d",2])

     ?、弁ㄟ^其他實例對象的方法(例如stringByAppendingString:)

    b.nil

      可以給nil發送消息,但只會得到nil

      對于返回為struct類型的方法會返回未定義的類型

    c.動態綁定

      對象在執行期間(runtime)才會判斷所引用對象的實際類型.

      id(實質上為所有對象指針的類型如NSString *),這里討論動態綁定主要為了明確哪些情況會出現編譯警告與運行崩潰,方便后面討論統一概念。

      課程中的原例子:

1 @interface Vehicle2 - (void)move;3 @end4 @interface Ship : Vehicle5 - (void)shoot;6 @end

      情況①:屬于正常使用情況,不會出現編譯警告與崩潰。

 1 Ship *s = [[Ship alloc] init]; 2 [s shoot]; 3 [s move]; 

      情況②:父類調用子類特有方法,編譯時會有警告,運行時正常運行。

 1 Vehicle *v = s; 2 [v shoot]; 

      情況③:任意id類型調用子類方法,無編譯警告(因為類型為id),運行時若obj不為ship類,則會崩潰。若調用不存在的方法,則會出現編譯警告(盡管類型為obj)

 1 id obj = ...; 2 [obj shoot]; 3 [obj someMethodNameThatNoObjectAnywhereRespondsTo]; 

       請況④:其他類型調用子類方法,會出現編譯警告,若進行類型轉換則沒有編譯警告,但仍會崩潰。

1 NSString *hello = @”hello”;2 [hello shoot];3 Ship *helloShip = (Ship *)hello;4 [helloShip shoot];5 [(id)hello shoot];

     動態綁定的問題可能會引發嚴重的錯誤(如毫無節制的類型轉換等)

     解決動態綁定問題的思路:內省機制,協議

     內?。篘SObject基類提供了一系列的方法如isKindOfClass:(是否為這個類或其子類的實例),isMemberOfClass:(是否為這個類的實例),respondsToSelector:(對象是否響應某方法)來在運行時檢測對象的類型。

     檢測方法的變量為選擇器selector(SEL),使用方法如下:

1 if ([obj respondsToSelector:@selector(shoot)]) {2     [obj shoot];3 } else if ([obj respondsToSelector:@selector(shootAt:)]) {4     [obj shootAt:target];5 }6 7 SEL shootSelector = @selector(shoot);8 SEL shootAtSelector = @selector(shootAt:);9 SEL moveToSelector = @selector(moveTo:withPenColor:);
1 [obj performSelector:shootSelector];2 [obj performSelector:shootAtSelector withObject:coordinate];3 4 [array makeObjectsPerformSelector:shootSelector]; // 用于數組,批量對數組中的對象發送消息5 [array makeObjectsPerformSelector:shootAtSelector withObject:target]; // target is an id6 7 [button addTarget:self action:@selector(digitPRessed:) ...];//MVC中的target-action

 

   1、Foundation

    a.NSObject

      所有類型的基類,提供了一系列通用的方法。
      - (NSString *)description描述對象內容(格式化輸出%@),一般在子類中自實現。

      - (id)copy; // 嘗試復制為不可變對象
      - (id)mutableCopy; // 嘗試復制為可變對象

    b.NSArray

- (NSUInteger)count;- (id)objectAtIndex:(NSUInteger)index; //返回下標為index的數組元素- (id)lastObject; // 返回數組末尾元素- (id)firstObject; // 返回數組頭元素- (NSArray *)sortedArrayUsingSelector:(SEL)aSelector;//使用自定義方法對數組排序- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)selectorArgument;- (NSString *)componentsJoinedByString:(NSString *)separator;//將數組轉化為字符串并用separator分隔

     c.NSMutableArray

1 + (id)arrayWithCapacity:(NSUInteger)numItems; // numItems is a performance hint only 2 + (id)array; // [NSMutableArray array] is just like [[NSMutableArray alloc] init]3 4 - (void)addObject:(id)object; // 在尾部加入元素5 - (void)insertObject:(id)object atIndex:(NSUInteger)index;//在下標index處插入元素6 - (void)removeObjectAtIndex:(NSUInteger)index;//移除index處元素

     數組的遍歷:

 1 NSArray *myArray = ...; 2 for (NSString *string in myArray) 3  {  4     // no way for compiler to know what myArray contains 5     double value = [string doubleValue]; // crash here if string is not an NSString  6 } 7  8 NSArray *myArray = ...; for (id obj in myArray) 9  {10     // do something with obj, but make sure you don’t send it a message it does not respond to 11     if ([obj isKindOfClass:[NSString class]]) 12     {13         ?// send NSString messages to obj with no worries14      }15 }    

     d.NSNumber

      對常用基本類型的封裝

1 NSNumber *n = [NSNumber numberWithInt:36];2 float f = [n floatValue];3 4 //便利初始化方式5 NSNumber *three = @3;6 NSNumber *underline = @(NSUnderlineStyleSingle); // enum7 NSNumber *match = @([card match:@[otherCard]]); 

     e.其他簡單類型

      NSValue、NSData、NSDate(NSCalendar,NSDataFormatter,NSDateComponents)、NSSet(NSMutableSet)、NSOrderedSet(NSMutableOrderedSet)

     f.NSDictionary

//初始化方式@{ key1 : value1, key2 : value2, key3 : value3 }//查表方式UIColor *colorObject = colors[colorString]; //常用方法- (NSUInteger)count;- (id)objectForKey:(id)key;

    g.NSMutableDictionary

1 //常用方法2 - (void)setObject:(id)anObject forKey:(id)key;//添加鍵值3 - (void)removeObjectForKey:(id)key;//移除鍵值4 - (void)removeAllObjects;5 ?- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;//合并字典
1 //遍歷方式2 NSDictionary *myDictionary = ...;3    for (id key in myDictionary)4  {5     // do something with key here6     id value = [myDictionary objectForKey:key];7     // do something with value here 8 }

    h.屬性列表

    屬性列表是一種保存數據的方式,定義為集合的集合,可以為NSArray, NSDictionary, NSNumber, NSString, NSDate, NSData。

    可以對上述對象直接發送- (void)writeToFile:(NSString *)path atomically:(BOOL)atom;消息保存為屬性列表文件

    i.NSUserDefaults

    輕量級的本地數據存儲

[[NSUserDefaults standardUserDefaults] setArray:rvArray forKey:@“RecentlyViewed”];//常用方法- (void)setDouble:(double)aDouble forKey:(NSString *)key;- (NSInteger)integerForKey:(NSString *)key; // NSInteger is a typedef to 32 or 64 bit int - (void)setObject:(id)obj forKey:(NSString *)key; // obj must be a Property List- (NSArray *)arrayForKey:(NSString *)key; // will return nil if value for key is not NSArray//保存完畢后必須進行同步[[NSUserDefaults standardUserDefaults] synchronize];

    j.NSRange

1 typedef struct {2     NSUInteger location;3     NSUInteger length;4 } NSRange;5 6 //創建7 NSMakeRange(NSUInteger location,NSUInteger length);

  2、UIKit

    a.UIColor

//系統內置顏色[UIColor blackColor];[UIColor blueColor];[UIColor greenColor];...//RGB顏色+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;//alpha為透明度//HSB顏色+ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;

    b.UIFont

//系統字體UIKIT_EXTERN NSString *const UIFontTextStyleHeadline NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIFontTextStyleBody NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIFontTextStyleSubheadline NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIFontTextStyleFootnote NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIFontTextStyleCaption1 NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIFontTextStyleCaption2 NS_AVAILABLE_IOS(7_0);//新建字體UIFont *font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];//常用方法+ (UIFont *)systemFontOfSize:(CGFloat)pointSize;+ (UIFont *)boldSystemFontOfSize:(CGFloat)pointSize;

    c.UIFontDescriptor

 1 //創建一個字體 2 + (UIFont *)fontWithDescriptor:(UIFontDescriptor *)descriptor size:(CGFloat)size; 3  4 //使用舉例 5 UIFont *bodyFont = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; 6 UIFontDescriptor *existingDescriptor = [bodyFont fontDescriptor]; 7 UIFontDescriptorSymbolicTraits traits = existingDescriptor.symbolicTraits; 8 traits |= UIFontDescriptorTraitBold; 9 UIFontDescriptor *newDescriptor = [existingDescriptor fontDescriptorWithSymbolicTraits:traits];10 UIFont *boldBodyFont = [UIFont fontWithFontDescriptor:newDescriptor size:0];

    d.Attributed Strings

     ?、貼SAttributeString

        帶屬性的字符串(不是字符串),可通過字典設置一系列字符屬性。

//獲取特定范圍的字符屬性- (NSDictionary *)attributesAtIndex:(NSUInteger)index effectiveRange:(NSRangePointer)range;//獲取對應字符串- (NSString *)string;

      ?、贜SMutableAttributeString

//常用的動態設定屬性的方法- (void)addAttributes:(NSDictionary *)attributes range:(NSRange)range;- (void)setAttributes:(NSDictionary *)attributes range:(NSRange)range;- (void)removeAttribute:(NSString *)attributeName range:(NSRange)range;//轉化為可變字符串- (NSMutableString *)mutableString
//舉例UIColor *yellow = [UIColor yellowColor];UIColor *transparentYellow = [yellow colorWithAlphaComponent:0.3];//字符串屬性字典 @{ NSFontAttributeName :      [UIFont preferredFontWithTextStyle:UIFontTextStyleHeadline]   NSForegroundColorAttributeName : [UIColor greenColor],   NSStrokeWidthAttributeName : @-5,   NSStrokeColorAttributeName : [UIColor redColor],   NSUnderlineStyleAttributeName : @(NSUnderlineStyleNone),   NSBackgroundColorAttributeName : transparentYellow }
1 //for UIButton2 - (void)setAttributedTitle:(NSAttributedString *)title forState:...;3 //for UILable4 @property (nonatomic, strong) NSAttributedString *attributedText;5 //for UITextView6 @property (nonatomic, readonly) NSTextStorage *textStorage;

   3、作業

    無

 

  其它:本節課主要是理論鋪墊,著重API的講解,都是很常用的對象,因此務必做到熟練使用,在今后的iOS開發中才不會出現基礎問題。希望大家可以多多查閱文檔,實際編程時重點理解動態綁定等概念。

 

課程視頻地址:網易公開課:http://open.163.com/movie/2014/1/B/P/M9H7S9F1H_M9H7VPRBP.html

       或者iTunes U搜索standford課程


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久亚洲精品不卡| 日韩中文字幕网址| 久久人人爽亚洲精品天堂| 成人性生交大片免费看视频直播| 欧美日韩福利电影| 欧美日韩激情小视频| 国产精品狠色婷| 美女视频久久黄| 日韩久久精品电影| 伊人激情综合网| 97香蕉超级碰碰久久免费软件| 国产成人小视频在线观看| 国产乱人伦真实精品视频| 久久精品久久精品亚洲人| www.日韩.com| 亚洲国产美女久久久久| 久久久久日韩精品久久久男男| 欧洲亚洲在线视频| 中国人与牲禽动交精品| 日韩成人av网址| 欧美国产日韩一区二区在线观看| 久久影院中文字幕| 欧美日韩激情小视频| 丁香五六月婷婷久久激情| 在线精品视频视频中文字幕| 欧美激情一区二区久久久| 亚洲人免费视频| 久久亚洲成人精品| 国产精品久久久久久久久借妻| 国产精品 欧美在线| 色综合伊人色综合网站| 亚洲欧美另类自拍| 日本精品免费观看| 国产99久久精品一区二区| **欧美日韩vr在线| 欧美日韩国产综合视频在线观看中文| 91麻豆国产精品| 国产精品成人av性教育| 中文字幕亚洲情99在线| 国产精品美女网站| 亚洲欧洲一区二区三区在线观看| 国产成人精品久久久| 亚州精品天堂中文字幕| 国产v综合v亚洲欧美久久| 久久亚洲综合国产精品99麻豆精品福利| 96精品视频在线| 91精品91久久久久久| 97在线精品视频| 亚洲第一偷拍网| 成人夜晚看av| 黑丝美女久久久| 日本久久精品视频| 国产女人精品视频| 97免费在线视频| 性欧美xxxx视频在线观看| 欧美日韩国产一区二区三区| 中文字幕精品国产| 国产精品美女在线观看| 成人妇女免费播放久久久| 亚洲美女av电影| 日韩电视剧在线观看免费网站| 5252色成人免费视频| 久久视频国产精品免费视频在线| 美女性感视频久久久| 欧美激情videos| 日韩av在线看| 国产精品国产亚洲伊人久久| 亚洲综合精品伊人久久| 性色av一区二区三区红粉影视| 国产精品视频成人| 亚洲欧美一区二区三区在线| 欧美成人中文字幕在线| 色综合亚洲精品激情狠狠| 久久99视频免费| 欧美精品在线免费播放| 色综合久久中文字幕综合网小说| 成人写真福利网| 国产成人免费av| 91午夜理伦私人影院| 久久成人一区二区| 亚洲在线视频观看| 日韩视频免费中文字幕| 亚洲最大在线视频| 亚洲免费一级电影| 日韩av电影国产| 久久久久久久久久久久久久久久久久av| 国产精品福利小视频| 亚洲日本成人网| 亚洲区免费影片| 91亚洲精品在线| 亚洲精品视频播放| 日日骚久久av| 亚洲成avwww人| 欧美夜福利tv在线| 久久九九精品99国产精品| 性欧美在线看片a免费观看| 欧美电影《睫毛膏》| 欧美日韩国产中文精品字幕自在自线| 久久久久久亚洲精品中文字幕| 91九色综合久久| 国产精品久久久久久久久粉嫩av| 成人免费网站在线| 久久精品中文字幕| 81精品国产乱码久久久久久| 欧美精品video| 国产精品18久久久久久首页狼| 久久久av亚洲男天堂| 成人国产在线激情| 欧美精品午夜视频| 九九热r在线视频精品| 亚洲国产天堂网精品网站| 97精品视频在线播放| 国产精品一区二区三区在线播放| 欧美激情在线视频二区| 日本精品视频在线| 国产在线视频2019最新视频| 亚洲国产精品va在线观看黑人| 成人黄色免费网站在线观看| 日韩电影在线观看中文字幕| 欧美激情aaaa| 中文字幕日韩综合av| 欧美在线观看日本一区| 亚洲伊人久久大香线蕉av| 欧美性xxxx极品hd欧美风情| 一区二区三区视频免费在线观看| 国产欧洲精品视频| 在线日韩日本国产亚洲| 日韩免费观看在线观看| 欧美日韩亚洲视频一区| 神马国产精品影院av| 欧美国产日本在线| 92福利视频午夜1000合集在线观看| 久久这里有精品视频| 成人福利在线视频| 亚洲男人第一网站| 欧美激情日韩图片| 久久精品视频网站| 欧美亚洲激情在线| 国产精品久久久久久久久久久久久久| 97在线精品视频| 欧美成人激情图片网| 国产成人黄色av| 亚洲美女免费精品视频在线观看| 欧美性生交大片免网| 8090成年在线看片午夜| 精品无人区乱码1区2区3区在线| 伊人久久男人天堂| 黑丝美女久久久| 日韩精品中文字幕在线观看| 亚洲白拍色综合图区| 久久精品一偷一偷国产| 国产啪精品视频网站| 91在线免费视频| 日韩欧美中文第一页| 亚洲第五色综合网| 国产福利成人在线| 亚洲国产精品久久久| 欧美洲成人男女午夜视频| 欧美日韩999| 亚洲精品国产福利| 日韩av在线播放资源| 中日韩美女免费视频网址在线观看| 国产91精品青草社区| 国产乱肥老妇国产一区二|