1. 程式人生 > >黑馬程式設計師——Foundation框架——NSArray和NSMutableArray

黑馬程式設計師——Foundation框架——NSArray和NSMutableArray

接下來複習的內容是Foundation中使用頻率很高的NSArray和NSMutableArray。

這兩個類和Java中集合的概念相似。

一、NSArray

NSArray是一個數組性質的類。並且同樣與Java類似,只能用來存放物件(且只能是OC物件)。不允許有空值出現。

NSArray是不可更改的,一旦建立完成後,我們無法對其中的項進行新增或刪除的操作。NSArray中存放是有序的。

下面是一些NSArray相關的常用操作和方法,包含了具體的程式碼練習:

pragma mark NSArray
void array1(){
    
    //NSArray只允許儲存 OC物件
    
    //建立一個空陣列
    NSArray *array = [NSArray array];
    //建立有一個元素的陣列
    array = [NSArray arrayWithObject:@"Elors"];
    //建立有多個元素的陣列
    array = [NSArray arrayWithObjects:@"Elors", @"Ashi", @"Archive", nil];
    
    
    //檢視元素個數
    unsigned long count = array.count;  //3
    //檢測是否包含了這個元素
    BOOL flag = [array containsObject:@"Elors"];    //1
    //獲取最後一個元素
    [array lastObject]; // Archive
    //獲取指定位置的物件元素
    [array objectAtIndex:0];    // Elors

    //使陣列內所有物件呼叫方法
    [array makeObjectsPerformSelector:@selector(description)];
    
    //NSLog(@"%d", flag);
    //NSLog(@"%ld",count);
    //NSLog(@"%@",[array description]);
};

有了陣列之後,我們需要面對另外一個使用頻率極高的操作了——遍歷陣列。

下面的程式碼練習中。我分別使用了四種方式實現了對陣列的遍歷:

1.普通迴圈

#pragma mark 遍歷陣列
void array2(){
    
    NSArray *array = [NSArray arrayWithObjects:
                      @"Elors", @"Ashi", @"Archive", nil];
    for (int i = 0, max = array.count; i < max; i++) {
        NSObject *obj = [array objectAtIndex:i];
        NSLog(@"%@",obj.description);
    }
    

2.for in迴圈
 
    NSArray *array = [NSArray arrayWithObjects:
                      @"Elors", @"Ashi", @"Archive", nil];
    for (NSObject *obj in array) {
        NSLog(@"%@",obj.description);
    }

3.使用Foundation框架提供的方法
 
    NSArray *array = [NSArray arrayWithObjects:
                      @"Elors", @"Ashi", @"Archive", nil];
    [array enumerateObjectsUsingBlock:
    ^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"%@",[obj description]);
        //*stop = YES;  //終止遍歷
    }];

4.使用其迭代器
 NSArray *array = [NSArray arrayWithObjects:
                      @"Elors", @"Ashi", @"Archive", nil];
    //獲取陣列迭代器
    NSEnumerator *em = [array objectEnumerator];
    //反序迭代器
    em = [array reverseObjectEnumerator];
    id obj = nil;
    while (obj = [em nextObject]) {
        NSLog(@"%@",[obj description]);
    }

以上四中方式中,第三種使用比較方便。

二、NSMutableArray

NSMutableArray同樣是一個數組性質的類,它繼承於NSArray。它是一個可變的陣列。在建立之後可以對陣列項進行操作。

由於NSMutableArray繼承與NSArray,所以大部分東西都是大同小異的,下面我列舉一些基本的操作方法:

void array1(){
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Elors", nil];
    //新增元素
    [array addObject:@"Ashi"];
    [array addObject:@"AXE"];
    
    //刪除最後一個元素
    //[array removeLastObject];
    //刪除所有元素
    //[array removeAllObjects];
    
    //替換元素
    [array replaceObjectAtIndex:1 withObject:@"Archive"];

    //排序
    [array sortUsingSelector:@selector(compare:)];
    
    NSLog(@"%@",array.description);
};