Objective-C文法之數組對象的那些事兒
雨松MOMO原創文章如轉載,請註明:轉載至我的獨立網域名稱部落格雨松MOMO程式研究院,原文地址:http://www.xuanyusong.com/archives/412
使用數組對象建立的數組功能非常強大,在Java語言或者C語言中定義的數組必須滿足數組中的每一個元素必須是同樣的類型。而Objective-C語言可以在Array數組中放任意類型的資料,值得注意的是只能放指向這個對象的指標,如果直接放int ,char,double 等等,是不行的.
1.不可變數組對象
使用NSArray關鍵字建立一個不可變的數組,一旦初始化完畢後這個數組的元素是不可以在動態添加與刪除。
建立MyClass對象,將指向這個對象的指標也可以存入NSArray數組中,可見NSArray對象數組中可以儲存任意對象的資料。
[array count] : 得到這個對象數組的長度。
[array objectAtIndex 0]: 傳入數組腳標的id 得到資料對象。
[arrayWithObjects; ...] :向數組對象初始化賦值。這裡可以寫任意對象的指標,結尾必須使用nil。標誌結束~
使用for迴圈遍曆這個數組對象。
#import <UIKit/UIKit.h>#import "MyClass.h"int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我們的測試代碼 //建立自訂類 MyClass *myClass = [[MyClass alloc]init]; //建立一個不可變的數組 NSArray *array= [NSArray arrayWithObjects:@"雨松", @"MOMO",@"哇哢哢",myClass,nil]; //得到數組的長度 int count = [array count]; //遍曆這個數組 for (int i = 0; i < count; i++) { NSLog(@"普通的遍曆:i = %d 時的數組對象為: %@",i,[array objectAtIndex: i]); } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal;}
上面的for迴圈遍曆方法比較普遍,但是效率不好,而且安全性不高。Objective-C 提供了一種快速枚舉遍曆方法,推薦大家都使用這種方法來遍曆。
for(NSObject *object in array) : 遍曆array這個數組,每一次迴圈將數組中的元素賦值給 *object ,實現迴圈遍曆。
#import <UIKit/UIKit.h>#import "MyClass.h"int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我們的測試代碼 //建立自訂類 MyClass *myClass = [[MyClass alloc]init]; //建立一個不可變的數組 NSArray *array= [NSArray arrayWithObjects:@"雨松", @"MOMO",@"哇哢哢",myClass,nil]; //遍曆這個數組 for (NSObject *object in array) { NSLog(@"快速的遍曆數組對象為: %@",object); } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal;}
2.可變數組對象
[NSMutableArray arrayWithCapacity:10] :初始化可變數組對象的長度,如果後面代碼繼續添加數組超過長度10以後
NSMutableArray的長度會自動擴充,所以不用擔心數組越界。
[array addObject:...] : 向可變數組尾部添加資料對象。
[array addObjectsFromArray:..] :向可變數組尾部添加一個數組對象。 *)#>];
#import <UIKit/UIKit.h>#import "MyClass.h"int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我們的測試代碼 //建立自訂類 MyClass *myClass = [[MyClass alloc]init]; //建立一個可變的數組長度為10 NSMutableArray *array = [NSMutableArray arrayWithCapacity:10]; //向數組中動態添加對象 [array addObject:@"雨松"]; [array addObject:@"MOMO"]; [array addObject:@"小可愛"]; [array addObject:@"哇哢哢"]; [array addObject:myClass]; for (NSObject * object in array) { NSLog(@"輸出對象數組:%@", object); } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal;}
[array insertObject:@"插入一隻小老虎" atIndex:1] :向可變數組中插入一個字串對象,並且設定它的位置腳標索引為 1。
[array insertObject:(NSArray *) atIndex:(NSIndexSet *)] :向可變數組中插入一個數組對象,可以任意設定它的位置腳標索引。
#import <UIKit/UIKit.h>#import "MyClass.h"int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我們的測試代碼 //建立自訂類 MyClass *myClass = [[MyClass alloc]init]; //建立一個可變的數組長度為10 NSMutableArray *array = [NSMutableArray arrayWithCapacity:10]; //向數組中動態添加對象 [array addObject:@"雨松"]; [array addObject:@"MOMO"]; [array addObject:@"小可愛"]; [array addObject:@"哇哢哢"]; [array addObject:myClass]; //向數組中插入 [array insertObject:@"插入一隻小老虎" atIndex:1]; for (NSObject * object in array) { NSLog(@"輸出對象數組:%@", object); } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal;}
NSRange range = NSMakeRange(0,5); 設定一個範圍為 0 到 5 之間。
[array removeObject:myClass inRange:range] : 設定在一個範圍內刪除資料,如果這個範圍內沒有刪除的這個對象則不會刪除任何東西。例子中因為myClass對象在 數組 0 到 5的範圍內,所以myClass就被刪除掉了。
[array removeObject:(id)] :無需考慮範圍,主要數組中存在這個對象就會直接被刪除。
[array removeObjectAtIndex:(NSUInteger)]:刪除數組中指定腳標索引的資料。
[array removeObjectIdenticalTo:(id)] : 刪除數組中指定元素
[array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定範圍內刪除指定的元素。
[array removeObjectsInArray:(NSArray *)] :刪除一個數組的元素。
#import <UIKit/UIKit.h>#import "MyClass.h"int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我們的測試代碼 //建立自訂類 MyClass *myClass = [[MyClass alloc]init]; //建立一個可變的數組長度為10 NSMutableArray *array = [NSMutableArray arrayWithCapacity:10]; //向數組中動態添加對象 [array addObject:@"雨松"]; [array addObject:@"MOMO"]; [array addObject:@"小可愛"]; [array addObject:@"哇哢哢"]; [array addObject:myClass]; //設定一個刪除範圍 NSRange range=NSMakeRange(0,5); //刪除元素 [array removeObject:myClass inRange:range]; for (NSObject * object in array) { NSLog(@"輸出對象數組:%@", object); } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal;}
[array replaceObjectAtIndex 2 withObject:@"已經修改了"]:替換數組腳標為2的資料。
#import <UIKit/UIKit.h>#import "MyClass.h"int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //添加我們的測試代碼 //建立自訂類 MyClass *myClass = [[MyClass alloc]init]; //建立一個可變的數組長度為10 NSMutableArray *array = [NSMutableArray arrayWithCapacity:10]; //向數組中動態添加對象 [array addObject:@"雨松"]; [array addObject:@"MOMO"]; [array addObject:@"小可愛"]; [array addObject:@"哇哢哢"]; [array addObject:myClass]; //修改腳標索引為2的元素 [array replaceObjectAtIndex: 2 withObject:@"已經修改了"]; for (NSObject * object in array) { NSLog(@"輸出對象數組:%@", object); } int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal;}
感覺Objective-C 的對象數組真的很給力,善用數組對象處理資料也是個不錯的選擇噢 ,嘻嘻~~