在Object C也提供了類似C#中的Array數組對象,在Object C中使用NSArray 來創建數組;但是在Object C中NSArray 只能存放對象類型的指針,不能存放int,char,double等基本數據類型。
一. 不可變數組對象
這個和之前的NSString有些類似,NSArray 能夠創建不可變的數組對象。一旦初始化這個對象就不能動態的修改和增加這個數組。
(1)使用arrayWithObjects來初始化數組內容,參考如下代碼:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf"];
上面初始化了一個items數組對象,但是值得注意的是,這段代碼會報錯,在Object C中數組對象的創建有個特殊的地方,就是最后一個元素必須是nil,這意味着使用nil來標識數組對象的結束。正確的方式如下:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil];
(2)可以使用count方法來獲取數組的長度
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil]; NSLog(@"%d",[items count]);
以上代碼得到的值是2,還是3呢,一般人都會認為是3,但是這個數組的長度是2,上面已經提過了nil只是作為一個結束標識符,並不能代表素組內容。現在修改代碼如下:
NSArray *items=[NSArray arrayWithObjects:@"abc",@"cdf",nil,nil]; NSLog(@"%d",[items count]);
得到的數組長度仍然為2,在第一個nil的位置就已經標識數組結束了,所以后面出現再多的數組元素都沒有作用。
(3)使用objectAtIndex來獲取某個索引位置的數組元素
NSLog(@"%@",[items objectAtIndex:0]);
以上代碼可以獲得素組對象items索引位置為0的元素,但是一定要注意數組的長度,否則數組越界異常。
(4)使用for來遍歷數組元素
for(int i=0;i<[items count];i++){ NSLog(@"%@",[items objectAtIndex:i]); }
以上代碼和我們平時使用遍歷數組的方式無異,基本都是這種情況。但是for還有另外一種使用方式,和C#中的foreach使用方式一樣。
for(NSObject *item in items){ NSLog(@"%@",item); }
二. 動態數組
(1)根據上面所描述的,大致可以猜得出來動態數組類,和NSMutableString比較類似。我們使用NSMutableArray來定義一個動態數組。而且NSMutableArray 還提供了一些方法動態像數組中添加元素,在NSMutableArray不用擔心在添加元素的時候發生數組越界的問題,當NSMutableArray長度被占滿之后會自動擴容。
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2];
我們使用arrayWithCapacity來定義一個數組的容量。
(2)可以使用addObject方法來向對象數組中添加元素,而且NSMutableArray和NSArray不一樣,不需要使用nil來介紹標識數組結束。NSMutableArray中同樣提供了count 方法來獲取數組的長度,這里需要注意的是count和capacity 是不一樣的,count是獲取的實際長度,而capacity是可存放的長度。
NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:12]; [mutItems addObject:@"abc"]; [mutItems addObject:@"def"]; NSLog(@"%d",[mutItems count]);
如果往muItems中繼續添加元素,直到超過12個,muItems也不會報錯,而且count也會大於12,這也是NSMutableArray的優勢所在。
(3)使用insertObject 在特定的位置添加元素

NSMutableArray *mutItems=[NSMutableArray arrayWithCapacity:2]; [mutItems addObject:@"abc"]; [mutItems addObject:@"def"]; [mutItems addObject:@"45454"]; NSLog(@"%d",[mutItems count]); [mutItems insertObject:@"wang" atIndex:1]; for (NSString *item in mutItems) { NSLog(@"%@",item); }
(4)刪除數組中的元素
- (void)removeObject:(id)anObject inRange:(NSRange)range;設置在一定范圍內刪除,如果在這個范圍內沒有匹配的元素則什么都不刪除。
- (void)removeObject:(id)anObject;刪除指定元素
- (void)removeObjectsInArray:(NSArray *)otherArray;刪除數組中指定的元素
- (void)removeObjectsAtIndexes:(NSIndexSet *)indexes;刪除指定索引位置的元素
NSRange range=NSMakeRange(0, 2); [mutItems removeObject:@"wang" inRange:range]; for (NSString *item in mutItems) { NSLog(@"----- %@",item); }
(5)替換數組元素內容
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 可以使用這個方法來替換某個索引位置的元素
[mutItems replaceObjectAtIndex:1 withObject:@"FFFFFFFFFFFFFF"]; for(NSString *item in mutItems){ NSLog(@"************ %@",item); }
本文只是很初略的記錄了學習的一些常用方法,NSArray和NSMutableArray 還提供了大量的其他方法,仍有待繼續努力學習和使用!