设为首页 收藏本站
查看: 910|回复: 0

[经验分享] Foundation Kit「Learn Objective-C on Mac

[复制链接]

尚未签到

发表于 2016-5-18 09:00:47 | 显示全部楼层 |阅读模式
Cocoa
  Cocoa框架實際上由Foundation Kit和AppKit兩個不同的框架組成.Foundation框架中有很多有用的,面向數據的低級類和數據類型.此框架主要用來處理界面無關的內容,AppKit則包含了所有的用戶接口對象和高級類.
  結構體類型
  Cocoa中一些類據類型是使用struct實現的,不使用對象實現的原因就在於性能.對象的開銷比較大(對象都是動態分配的).所以對這種數據類型可以使用三種方式賦值.
  typedef struct  _NSRange{
unsigned int location;
unsigned int length;
}NSRange;
  1.
NSRange range;
range.lcation=17;
range.length=4;
  2.
NSRange range =(17,4);
  3.
NSRage range =NSMakeTange(17,4);
  其他還有NSPoint,NSSize,NSRect等數據類型也是如此,除了1,2種賦值方法外,也都有對應的函數可以生成數據:NSMakePoint(),NSMakeSize(),NSMakeRect()等.
NSString
  @""是NSString字面量寫法.
  NSString可以准確地處理Unicode字符串.
  + stringWithFormat:類級方法,通過格式化字符串和一組參數輸出格式化後的結果.
  – isEqualToString:對象級方法,比較與所給的字符串是否相同.
  Cocoa中的字符串是對象,所以不能用 == 號來比較.如果使用 == 號比較兩個字符串對象,那麼事實上是比較了兩個對象的指針.
  – compare:與給定的字符串比較(區分大小寫),返回一個枚舉值作為結果.
  – compare:options:
  – compare:options:range:
  – compare:options:range:locale:字符串比較方法,帶選項的版本(如:是否區分大小寫)
  – hasPrefix:測試是否以給定的字符串開頭
  – hasSuffix:測試是否以給定的字符串結尾
  – rangeOfString:查詢給定字符串在字符串對象中的位置.
NSMutableString
  NSString的子類,NSMutableString是NSString的可修改版本.
  + stringWithCapacity:容量建議值.對象會以此方法給出的建議值劃分出一塊內存作為可變字符串對象的初始大小.合理使用可以提高性能.
  – appendFormat:向字符串對象追加內容.
  – appendString:使用格式化方式向字符串對象追加內容.
  – deleteCharactersInRange:從字符串對象的指定范圍中刪除字符串.
集合
NSArray
  NSArrary是一個用來存儲對象的有序列表.
  限制:只能存儲Objective-C對象.不能存儲C語言中的基本數據類型(如int,float,enum,struct,或者NSArray中的隨機指針),也不能存儲nil或者NULL值.
  – count獲得列表包含的對象數.
  – objectAtIndex:獲取特定索引處的對象.索引值超出范圍時,將引發一個異常.
  Cocoa框架中對象往往都是以類族的形式實現的.如:NSArray對象可能會在運行時發現其實運作的是NSCFArray(來自Core Foundation框架(C語言的實現版本),很多Cocoa對象都是如此做橋接的).
NSMutableArray
  NSArray的可變版本.
  + arrayWithCapacity:以建議值作為初始化大小.
  – addObject:追加對象
  – removeObjectAtIndex:從指定索引處刪除對象
NSEnumerator
遍歷集合時:
  使用for循環向集合對象發送objectAtIndex:消息來獲取對象.
  使用枚舉對象來完成遍歷集合的工作.
Mac OS X Tiger 之前的系統,支持的語法:
  NSEnumerator*enumerator;
  enumerator = [array objectEnumerator];
  id thingie;
  while(thingie = [enumeratornextObject]){
//something to do.
}
  即向集合對象發送objectEnumerator消息,以獲取一個枚舉對象(或者NSEnumerator類或其子類的實例),然後在while循環中向此枚舉對象循環發送nextObject以依次獲取枚舉中的每個對象,直到枚舉的末尾(直到nextObject消息返回一個nil對象).
Mac OS X Leopard之後的系統可使用如下語法:
  for(NSString *stringinarray){
//to do something.
}
NSDictionary / NSMutableDictionary
  字典對象(及可變型字典對象).
  + dictionaryWithObjectsAndKeys:使用所給的鍵值對建立字典.
  – setObject:forKey:添加字典項
  – removeObjectForKey:刪除字典項
不要擴展Cocoa框架下的類
  Cocoa中許多類都是以類簇的方式實現的.即它們是一群隱藏在通用接口下的與實現相關的類.
  比如:使用NSString對象的是個,實際上獲得的可能是NSLiteralString,NSCFString,NSSimpleCString,NSBallofString或者其他未寫入文檔的與實現相關的對象.
  不要想著為以類簇方式實現的類添加子類,這可能是很痛苦的事情,想要擴展這類類的能力時,可考慮"復合"或者"類別".
數值類
NSNumber
  用於包裝基本數據類型,如:int,float等.成為一個對象,以便將基本數據類型放入集合類中.
  + numberWithBool:由布爾型生成對象
  + numberWithChar:字符型
  + numberWithDouble:雙精度浮點型
  + numberWithFloat:單精度浮點型
  + numberWithInt:整型
  + numberWithInteger:ObjC整型
  + numberWithLong:長整型
  + numberWithLongLong:長長整型
  + numberWithShort:短整型
  使用以下方法可以從對象中提取回基本數據型值.
  – boolValue
  – charValue
  – decimalValue
  – doubleValue
  – floatValue
  – intValue
  – integerValue
  – longLongValue
  – longValue
  – shortValue
  都是顧名思義的方法名.
NSValue
  NSValue是NSNumber的父類,可以用來包裝任意值.NSNumber不能包裝的struct,也可以用這個類來包裝.
  + valueWithBytes:objCType:第一參數傳入要包裝的數值的地址.第二個參數為數據類型的描述字符串(一般可以直接用@encode命令來生成)
  NSRect rect = NSMakeRect(1,2,30,40);
  NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(NSRect)];
  [array addObject:value];
  使用- getValue:方法可以從NSValue對象中提取出數據的指針(可以看到get前輟的方法約定,總是用來提取指針,而不是值).
  NSValue中有一些方法,可以用來快速包裝Cocoa常用結構體數據類型:
  + valueWithPoint:快速包裝NSPoint對象
  + valueWithRange:NSRange
  + valueWithRect:NSRect
  + valueWithSize:NSSize
NSNull
  空類型,由於集合類中不能添加nil值(被用來識別為集合的結尾處),所以你可以使用NSNull對象添加到集合中,以表示空(無,沒有)成員.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-218474-1-1.html 上篇帖子: Mac + Rails3 + MongoDB的Demo工程搭建 下篇帖子: OS市场大PK:Windows VS. iOS VS. Android
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表