NSMutableArray和NSArray的常用方法及相互轉換
// NSArray --> NSMutableArray
NSMutableArray *myMutableArray = [myArray mutableCopy];
NSMutableArray *myMutableArray = [NSMutableArray arrayWithArray:myArray]; // NSMutableArray --> NSArray
NSArray *myArray = [myMutableArray copy];
NSArray *myArray = [NSArray arrayWithArray: myMutableArray];
NSArray 創建的是靜態數組,一旦創建之后,就再也不能添加和刪除數組中的對象了。
[arr count]; 得到這個對象數組的長度。
[arr objectAtIndex: ...]; 傳入數組腳標的id 得到數據對象。
| +(id)arrayWithObjects:obj1,obj2,...nil | 創建一個新的數組,obj1,obj2......是他的元素對象,以nil對象結尾 |
| -(BOOL)containsObject:obj | 確定數組中是否包含對象obj |
| -(NSUInteger)count | 返回數組元素個數 |
| -(NSUInteger)indexOfObject:obj | 第一個包含obj元素的索引號 |
| -(id)objectAtIndex;i | 返回存儲在位置 i 的對象 |
| -(void)makeObjectsPerformSelector:(SEL)selector | 將 selector 只是的消息發送給數組中的每個元素 |
| -(NSArray*)sortedArrayUsingSelector:(SEL)selector | 根據selector 指示的比較方法對數組進行排序 |
| -(BOOL)writeToFile:path atomically:(BOOL)flag | 將數組寫入指定的文件中,如果 flag 為 YES,則需要先創建一個臨時文件 |
可變數組對象:
NSMutableArray 是 NSArray 補充類。NSMutalbeArray 創建的是動態數組,可隨意添加或刪除數組中的元素。也許你會看到 arrayWithCapacity 方法,這個數組容量僅僅是一個參考,不會真的限制數組的大小。 是為代碼優化而設計的。
[NSMutableArray arrayWithCapacity:10] :初始化可變數組對象的長度,如果后面代碼繼續添加數組超過長度10以后NSMutableArray的長度會自動擴充,所以不用擔心數組越界。
[array addObject:...] : 向可變數組尾部添加數據對象。
[array addObjectsFromArray:..] :向可變數組尾部添加一個數組對象。
| array | 創建一個空數組 |
| +(id)arrayWithCapacity:size | 創建一個數組,指定容量為size |
| -(id)initWithCapacity:size | 初始化一個新分配的數組,指定容量為size |
| -(void)addObject:obj | 將對象obj添加到數組末尾 |
| -(void)insertObject:obj atIndex:i | 將對象 obj 插入到索引為 i 的位置 |
| -(void)replaceObject:obj atIndex:i | 將數組中索引為 i 處的元素用obj 置換 |
| -(void)removeObject:obj | 從數組中刪除所有是 obj 的對象 |
| -(void)removeObjectAtIndex:i | 從數組中刪除索引為 i 的對像 |
| -(void)sortUsingSelector:(SEL)selector | 用 selector 只是的比較方法將數組排序 |
在iOS 開發過程中, NSArray,NSMutableArray、NSDictionary、 NSMutableDictionary 經常被用到。這里先來介紹NSArray 與 NSMutableArray。
首先,NSArray只能存儲Objective-C 對象,而不能存儲C語言中的基本數據類型,比如:int,flot,指針等。 在使用NSArray時,需特別注意,必須以nil 結尾。以此來代表結束。 舉例如下:
NSArray 通過類方法 arrayWithObjects 創建一個新的NSArray。
NSArray * array= [ NSArray arraryWithObjects: @"one", @"two", @"three",nil ] ;
為了查看array 的內容, 可通過NSLog方法,如下:
for(int i=0; i<[array count]; i++ )
{
NSLog (@"index %d has %@", i, [array objectAtIndex:i]);
}
從中可看出, NSArray 創建的是靜態數組,一旦創建之后,就再也不能添加和刪除數組中的對象了。
NSMutableArray 是 NSArray 補充類。NSMutalbeArray 創建的是動態數組,可隨意添加或刪除數組中的元素。
也行你會看到 arrayWithCapacity 方法,這個數組容量僅僅是一個參考,不會真的限制數組的大小。 是為代碼優化而設計的。
NSMutableArray 使用 addObject: 在末尾添加對象, 用 removeObjectAtIndex: 來刪除指定索引處的對象。對象刪除后,被刪除對象后面的數組元素被遷移,填補空缺。
這里需特別注意的是:NSArray 的初始化必須以 nil 結束。 如果忘記了,編譯器會報錯:Missing sentinel in method dispatch.
另外還需注意,在字符串前加 @ ,這是 數組在 Objective-C 與 C 的區別。
如何訪問獲取 NSArray 中的對象呢? 通過 NSArray的 objectAtIndex: 方法。 改寫如下:
NSArray 的初始化有 兩種方法:
(1) NSArray *array = [[NSArray alloc]initWithObjects: @"red", @"white",@"blue",nil]; // 不要忘記 最后補填 nil
(2) NSArray *array =@[@"red", @"white",@"blue"]; // 這種方法更為簡潔些
NSLog(@"array[0]=%@" , [array objectAtIndex:0]) ;
輸出結果是:array[0]=red
同理,通過 NSArray的 insertObjectAtIndex:可以很方便地將已有的對象插入數組中的指定位置。
小結:
NSArray 其實是很容易理解的。 從本質上講,NSArray 就是一個存放對象的容器。 NSArray 是靜態的對象數組,一旦創建后,就不能再添加和刪除對象。 如果你想添加或刪除,當然是有辦法的,而且還很簡單,那就是用 NSMutalbeArray 啊。
