Object-C學習筆記(三)

住院好幾天了。昨天剛安上無線網卡,寫了半天筆記結果破輸入法死機白忙活了,還得重搞。 數組

NSArray 是Cocoa的一個類,用於存放對象,這個類不能夠直接存放C中數據類型的數據,須要轉換成Object-C的對象才能夠。 調試

建立一個NSArray對象的方法有不少,這裏先說一個比較簡單的方法。 code

+ (NSArray) arrayWithObjects:(id) obj, ...
count 用於獲取NSArray中的對象個數
-(unsigned int) count;
objectAtIndex 用於根據索引獲取相應的對象,注意若是訪問了不存在的索引,不會像PHP同樣最多出現個Notice,將會致使程序崩潰,其實這是個好事,由於他會讓你及時的修正,避免因爲使用非法索引而致使出現難以調試的Bug。
- (id) objectAtIndex:(unsigned int)index;

componentsJoinedByString 這個跟PHP中的implode相似,用於根據一個字符串來將數組鏈接成一個新的字符串。 component

- (NSString *) componentsJoinedByString:(NSString *)dec;
componentsSeparatedByString 這個跟PHP中的explode相似,用於根據一個字符串來拆分另一個字符串,並將拆分後的結果存放在NSArray中。
- (NSArray *) componentsSeparatedByString:(NSString *)dec;

NSMuTableArray 跟NSString同樣NSArray也是不可變對象,一旦建立後不能夠進行增刪操做,須要NSMuTableArray 來操做 對象

NSMuTableArray 的建立方式也很簡單 索引

+(id) arrayWithCapacity:(unsigned int)numItems;
addObjects 用於在數組結尾增長新的對象
+ (void) addObject:(id) anObject;
removeObjectAtIndex 根據索引刪除數組中的對象
- (void) removeObjectAtIndex:(unsigned int) index;


以上是數組的簡單操做,這裏介紹下幾種簡單的遍歷方式ci

第一種 使用for循環加 count 方法遍歷 rem

int i = 0;
for(i = 0; i < [array count]; i++)
{
    [array objectAtIndex:i]
}
第二種 使用for in方式遍歷
for(NSString *str in array)
{
    操做
}
第三種 使用枚舉方式遍歷
NSEnumerator *enumer;
emumer = [array objectEnumerator];
NSString *str;
while(str = [enumer nextObject])
{
    操做
}
要注意的是 使用這種方式遍歷 遍歷過程當中不能夠對數組進行增刪操做 不然將會出現一些未知的錯誤

NSDictionary Object-C 容許你經過這個類來定義字典數據。 字符串

+ (id) dictionaryWithObjectsAndKeys:
                   (id) firstObject,...;
NSDictionary *dicts;
dicts = [NSDictionary dictionaryWithObjectsAndKeys:
        nameObj, @"name",
        oldObj, @"old",
        sexOBj, @"sex"
];
objectForKey 根據字典的key來獲取對象
- (id) objectForKey: (id) akey;

使用NSMuTableDictionary 來處理建立一個動態的字典 get

+ (id) dictionaryWithCapacity: (unsigned int)numItems;
setObject 用於對字典添加一條Key值,若是key存在則覆蓋
-(void) setObject:(id) anObject
           forKey:(id) aKey;
removeObjectForKey 刪除字典中的一個key值
- (void) removeObjectForKey:(id) akey;


像以前說的同樣,NSArray和NSDictionary都只能存儲對象,C類型的數據是沒法直接存儲的,因此若是須要存儲這些數據的話必需要轉換成對象後才能夠,下面介紹一些轉換方法。

NSNumber類封裝了一些方法用於將一些數值類型轉換成對象。

+(NSNumber *) numberWithChar:(char) value;
+(NSNumber *) numberWithInt:(int) value;
+(NSNumber *) numberWithFloat:(float) value;
+(NSNumber *) numberWithBool:(BOOL) value;
從對象中獲取這些數據的值也很簡單
- (int) intValue;
- (char) charValue;
- (float) floatValue;
- (BOOL) boolValue;
- (NSString *) stringValue;


NSValue

NSNumber 就是 NSValue的一個子類,使用NSValue能夠包裝任意類型的數據,使其能夠放在數組或者字典中。

+ (NSValue *) valueWithBytes: (const void *)value
                    objCtype: (const char *)type;
第一個參數使要包裝的數據地址,使用C的取址符獲取,第二個參數用於描述改數據的字符串,主要描述了數據類型和大小。使用@encode可使用指令獲取,例如 @encode(NSRect)。

getValue  使用getValue方法能夠獲取NSValue的實際值

- (void *) getValue: (void *)value;
返回的數據將存放在第一個參數所指的地址中。

Cocoa還提供了一些比較便捷的方法用於處理經常使用的結構

+ (NSValue *) valueWithPoint: (NSPoint) point;
+ (NSValue *) valueWithSize: (NSSize) size;
+ (NSValue *) valueWithRect: (NSRect) rect;

- (NSPoint) pointValue;
- (NSSize) sizeValue;
- (NSRect) rectValue;


NSNull 這個數據類型用於表示一個 爲空的數據(nil) 相似PHP的 NULL,表示什麼都沒有,使用null方法能夠建立這個對象。

+ (NSNull *)null;
NSNull的值老是同樣的 因此 能夠直接用 == 進行比較。
相關文章
相關標籤/搜索