天天看點

OC-字元串-NSComparisonResult

Foundation Kit

Cocoa由兩個不同的架構組成 Foundation Kit和Application Kit

Foundation架構中有很多諸如NSString,NSArray等低級類和資料類型

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. #import <Foundation/Foundation.h>  
  2. int main(int argc, const char *argv[]){  
  3.     NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];  
  4.     //insert code here...  
  5.     NSLog(@"Hello, World!");  
  6.     [pool drain];  
  7.     return 0;  
  8. }  

通過alloc建立并通過init初始化了一個池,在結尾處排空,這是Cocoa記憶體管理的預覽

一些有用的資料類型

範圍 NSRange

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. typedef struct _NSRange{  
  2.     unsigned int location;  
  3.     unsigned int length;  
  4. }NSRange;  

表示相關事物的範圍,如字元串中的字元範圍或數組中的元素範圍

建立一個新的NSRange有3種方式

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. //1  
  2. NSRange range;  
  3. range.location=17;  
  4. range.length=4;  
  5. //2  
  6. NSRange range={17,4};  
  7. //3  
  8. NSRange range=NSMakeRange(17,4);  

第三種方法的好處是可以在任何能夠使用函數的地方使用,比如當作參數

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. [anObject flarbulateWithRange: NSMakeRange(13,15)];  

幾何資料類型 NSPoint,NSSize

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. typedef struct _NSPoint{  
  2.     float x;  
  3.     float y;  
  4. }NSPoint;  
  5. typedef struct _NSSize{  
  6.     float width;  
  7.     float height;  
  8. }NSSize;  

比如Cocoa提供了矩形資料類型

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. typedef struct _NSRect{  
  2.     NSPoint origin;  
  3.     NSSize size;  
  4. }NSRect;  

同樣提供了NSMakePoint(),NSMakeSize(),NSMakeRect()方法

将這些資料類型作為struct而不是對象的好處是性能更高

字元串 NSString

建立字元串

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. NSString *height;  
  2. height=[NSString stringWithFormat: @"Your height is %d feet",5];  

類方法

我們所建立的大部分方法是執行個體方法 用前導減号 - 聲明

如果方法用于實作正常功能,用前導加好 + 來聲明類方法

就如NSString的stringWithFormat方法

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (id) stringWithFormat: (NSString *) format, ...;  

關于大小

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (unsigned int) length;  

使用方式

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. unsigned int length=[height length];  

該方法可以正确處理國際字元串

比較

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. isEqualToString  
  2. - (BOOL) isEqualToString: (NSString *) aString;  

使用方式

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. NSString *[email protected]"hello 5";  
  2. NSString *thing2;  
  3. thing2=[NSString stringWithFormat: @"hello %d",5];  
  4. if(thing1 isEqualToString: thing2]){  
  5.     NSLog(@"They are the same!");  
  6. }  

同樣的compare方法

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (NSCompar isonResult) compare: (NSString *) string;  

傳回一個NSComparisonResult枚舉類型

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. type enum _NSComparisonResult{  
  2.     NSOrderedAscending=-1,  
  3.     NSOrderedSame,  
  4.     NSOrderedDescending  
  5. }NSComparisonResult;  

如果傳回NSOrderedAscending 表示左側小于右側 其他類似

不區分大小寫的比較

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (NSComparisonResult) compare: (NSString *) string  
  2.                         options: (unsigned) mask;  

options參數是一個掩碼

NSCaseInsensitiveSearch 不區分大小寫

NSLiteralSearch 完全比較,區分大小寫

NSNumericSearch 比較字元個數而不是字元值 比如100應該排在99以後

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. if([thing1 compare: thing2  
  2.         options: NSCaseInsensitiveSearch | NSNumericSearch] == NSOrderedSame){  
  3.             NSLog(@"They match");  
  4.         }  

判斷字元串内是否包含其他字元串

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (BOOL) hasPrefix: (NSString *) aString;  
  2. - (BOOL) hasSuffix: (NSString *) aString;  

分别檢查以特定字元串開頭和結尾

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (NSRange) rangeOfString: (NSString *) aString;  

傳回比對的位置,如果找不到 則range.start=NSNotFound

可變性

NSString是不可變的

NSMutableString是可變字元串

兩者間比較類似Java中的String和StringBuffer

建立NSMutableString的方法

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (id) stringWithCapacity: (unsigned) capacity;  

該容量隻是一個建議 

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. NSMutableString *string;  
  2. string = [NSMutableString stringWithCapacity: 42];  

可以使用一些方法操作該string

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (void) appendString: (NSString *) aString;  
  2. - (void) appendFormat: (NSString *) format, ...;  

使用起來非常友善 也很顯而易見

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. NSMutableString *string;  
  2. string=[NSMutableString stringWithCapacity: 50];  
  3. [string appendString: @"Hello here"];  
  4. [string appendFormat: @"human %d!",39];  
  5. //得到最後結果Hello here human 39!  

類似的

删除字元串中的字元

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (void) deleteCharactersInRange: (NSRange) range;  

NSMutableString是NSString的子類,是以可以使用NSString的所有功能

是以同樣可以使用stringWithFormat來建立NSMutableString

集合家族 NSArray NSDictionary等

NSArray可以放入任意類型的對象

兩個限制:

1 隻能存儲Objective-C對象,而不能是C基礎類型int,float,enum,struct等

2 不能存儲零值nil NULL值

可以通過類方法arrayWithObjects建立,以逗号分割對象清單,并最後以nil表示清單結束

Ojbective-c代碼  

OC-字元串-NSComparisonResult
  1. NSArray *array;  
  2. array=[NSArray arrayWithObjects: @"one",@"two",@"three",nil];  

獲得對象個數

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (unsigned) count;  

取得特定索引處對象

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (id) objectAtIndex: (unsigned int) index;  

例如周遊一個數組

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. int i;  
  2. for(i=0;i<[array count];i++){  
  3.     NSLog(@"index %d has %@",i,[array objectAtIndex: i]);  
  4. }  

将字元串切分成數組

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. -componentsSeparatedByString  

将數組合并成字元串

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. -componentsJoinedByString  

可變數組

NSArray是不可變的,類似的NSMutableArray可變

建立新的可變數組

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (id) arrayWithCapacity: (unsigned) numItems;  

在數組末尾添加對象

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (void) addObject: (id) anObject;  

删除特定位置對象

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (void) removeObjectAtIndex: (unsigned) index;  

枚舉 NSEnumerator

通過objectEnumerator向數組請求枚舉器

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (NSEnumerator *) objectEnumerator;   

 這似乎類似于Java的疊代器Iterator

使用

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. NSEnumerator *enumerator;  
  2. enumerator=[array objectEnumerator];  

可以從後向前浏覽集合 reverseObjectEnumerator

請求下一個對象

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (id) nextObject;  

當傳回nil時表示結束

快速枚舉

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. for(NSString *string in array){  
  2.     NSLog(@"I found %@",string);  
  3. }  

NSDictionary 有些類似于Map(散清單,關聯數組)

類似的NSDictionary不可變,可變的NSMutableDictionary

建立字典的方法

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (id) dictionaryWithObjectsAndKeys: (id) firstObject, ...;  

例如

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. Tire *t1=[Tire new];  
  2. Tire *t2=[Tire new];  
  3. Tire *t3=[Tire new];  
  4. Tire *t4=[Tire new];  
  5. NSDictionary *tires;  
  6. tires=[NSDictionary dictionaryWithObjectsAndKeys: t1, @"front=left", t2, @"front-right", t3, @"back-left", t4, @"back-right", nil];  

使用objectForKey來擷取值

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (id) objectForKey: (id) aKey;  

例如查找右後輪胎

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. Tire *tire=[tires objectForKey: @"back-right"];  

同樣的,對于可變的字典

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (id) dictionaryWithCapacity: (unsigned int) numItems;  

為可變字典添加元素

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (void) setObject: (id) anObject forKey: (id) aKey;  

如果目前已有值,則新值會替代原有的值

删除值

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (void) removeObjectForKey: (id) aKey;  

使用但不擴充

不要自己去建立NSString,NSArray,NSDictionary的子類

各種數值

就和Java中對int,float等有Integer,Float等對象封裝,Objectvie-C也提供了NSNumber的包裝類

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (NSNumber *) numberWithChar: (char) value;  
  2. + (NSNumber *) numberWithInt: (int) value;  
  3. + (NSNumber *) numberWithFloat: (float) value;  
  4. + (NSNumber *) numberWithBool: (BOOL) value;  

類似的還有long,long long等

例如将一個包裝後的資料放入數組

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. NSNumber *number;  
  2. number=[NSNumber numberWithInt: 42];  
  3. [array addObject: number];  
  4. [dictionary setObject: num forKey: @"Bork"];  

從包裝類擷取值

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (char) charValue;  
  2. - (int) intValue;  
  3. - (NSString *) stringValue;  

 等

NSValue

NSNumber是NSValue的子類,NSValue可以包裝任意值

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (NSValue *) valuseWithBytes: (const void *) value  
  2.     objCType: (const char *) type;  

例如,将NSRect放入NSArray

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. NSRect rect=NSMakeRect(1,2,3,4);  
  2. NSValue *value;  
  3. value=[NSValue valueWithBytes: &rect  
  4.     objCType: @encode(NSRect)];  
  5. [array addObject: value];  

這裡使用@encode編譯器指令,它可以接受資料類型的名稱并轉化為合适的字元串

使用getValue取值

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (void) getValue: (void *) value;  

傳遞的是存儲該數值的變量位址

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. value=[array objectAtIndex: 0];  
  2. [value getValue: &rect];  

Cocoa提供了常用的将struct型資料轉換成NSValue的方法

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. + (NSValue *) valueWithPoint: (NSPoint) point;  
  2. + (NSValue *) valueWithSize: (NSSize) size;  
  3. + (NSValue *) valueWithRect: (NSRect) rect;  

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. - (NSPoint) pointValue;  
  2. - (NSSize) sizeValue;  
  3. - (NSRect) rectValue;  

例如,在NSArray中存儲和檢索NSRect

Objective-c代碼  

OC-字元串-NSComparisonResult
  1. value=[NSValue valueWithRect: rect];  
  2. [array addObject: value];  
  3. ...  
  4. NSRect anotherRect=[value rectValue];  

NSNull

之前提到nil在NSArray和NSDictionary中有特殊的含義,是以不能把nil放入其中,如果要真的表示沒有,Objectvie-C提供了NSNull

使用[NSNull null]==來比較是否為空