Foundation Kit「Learn Objective-C on Mac

 

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 = [enumerator nextObject]){
    //something to do.
}

即向集合對象發送objectEnumerator消息,以獲取一個枚舉對象(或者NSEnumerator類或其子類的實例),然後在while循環中向此枚舉對象循環發送nextObject以依次獲取枚舉中的每個對象,直到枚舉的末尾(直到nextObject消息返回一個nil對象).

Mac OS X Leopard之後的系統可使用如下語法:

for (NSString *string in array){
    //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對象添加到集合中,以表示空(無,沒有)成員.

 

你可能感兴趣的:(Foundation Kit「Learn Objective-C on Mac)