iOS开发之oc(十八)--Foundation(3)NSArray和NSMutableArray

(一)首先来看一个知识点

/*

 集合类:是拿来装对象的(有以下三种)

 1.NSArray\NSMutableArray

有序

快速创建(不可变):@[obj1, obj2, obj3]

•快速访问元素:数组名[i]

  2.NSSet\NSMutableSet

无序

 3.NSDictionary\NSMutableDictionary

无序

快速创建(不可变):@{key1 : value1,  key2 : value2}

•快速访问元素:字典名[key]

 */

 

(二)

NSArray :不可变数组

NSMutableArray : 可变数组

C语言数组:存放基本数据类型

OC数组:只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

 

1.不可变数组的创建

void create()
{
    /*
     int a = 5;   
     int ages[10] = {1, 90, 89, 17};         //  C数组   
     
     Person *p = [[Person alloc] init];       // OC数组(下面)
     Person *persons[5] = {p,  [[Person alloc] init]};
     */
    
    // OC数组不能存放nil值
    // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
    
    // 这个array永远是空数组
    // NSArray *array = [NSArray array];
    
    
    /*
     1.NSArray的创建
     */
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
    
    // nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
    // [array2 count];
    
    //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
    
    // 快速创建一个NSArray对象(这种方法只用于创建不可变数组)
    NSArray *array4 = @[@"jack", @"rose", @"4324324"];
    
    
    /*
     2.NSArray的元素个数
     */
    NSLog(@"%ld", array3.count);
    
    
    /*
     3.NSArray中元素的访问
     */
    NSLog(@"%@", [array3 objectAtIndex:1]);
    
    //array3[1];
    NSLog(@"%@", array3[0]);
}

2.不可变数组的遍历

// 遍历数组
void use1()
{
    Person *p = [[Person alloc] init];
    
    NSArray *array = @[p, @"rose", @"jack"];
    
// 方法1(通过下标)

    //    for (int i = 0; i<array.count; i++)
    //    {
    //        NSLog(@"%@", array[i]);
    //    }
    
 // 方法2  (for in 结构)  --推荐使用

    // id obj代表着数组中的每一个元素
    //int i = 0;
    //    for (id obj in array)
    //    {    
    //        // 找出obj元素在数组中的位置
    //        NSUInteger i = [array indexOfObject:obj];
    //
    //        NSLog(@"%ld - %@", i, obj);
    //        //i++;
    //
    //        if (i==1)
    //        {
    //            break;
    //        }
    //    }
    
// 方法3:Block  --推荐使用
    // 每遍历到一个元素,就会调用一次block
    // 并且当前元素和索引位置当做参数传给block

    [array enumerateObjectsUsingBlock:
     ^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld - %@", idx, obj);
         
         if (idx == 0)
         {
             // 停止遍历
             *stop = YES;
         }
         
     }];
    
//  上面block的本质
    //    void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
    //    {
    //        NSLog(@"%ld - %@", idx, obj);
    //
    //
    //        if (idx == 0)
    //        {
    //            // 停止遍历
    //            *stop = YES;
    //        }
    //    };
    //
    //    for (int i = 0; i<array.count; i++)
    //    {
    //        // 用来标记是否需要停止遍历
    //        BOOL isStop = NO;
    //
    //        // 取出元素
    //        id obj = array[i];
    //        
    //        myblock(obj, i, &isStop);
    //        
    //        
    //        if (isStop)
    //        {
    //            break;
    //        }
    //    }

}

3.不可变数组的使用

void use2()
{
    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
    
    // 添加元素
    [array addObject:[[Person alloc] init]];
    
    [array addObject:@"jack"];
    
    // 删除元素
    //[array removeAllObjects];
    // 删除指定的对象
    // [array removeObject:@"jack"];
    [array removeObjectAtIndex:0];
    
    // 错误写法
    // [array addObject:nil];
    
    NSLog(@"%@", array);
    
    NSLog(@"%ld", array.count);
}

4.可变数组

NSMutableArray它的使用基本和不可变数组类似----具体参照文档,那里面的很多方法,文档的说明才是王道。

注意:

int main()
{
    // @[] 只创建不可变数组NSArray
   
 /* 错误写法
    NSMutableArray *array = @[@"jack", @"rose"];
    
    [array addObject:@"jim"];
  */
    
    
    // NSArray *array = @[@"jack", @"rose"];
    
    return 0;
}

 

posted @ 2015-02-26 17:48  timo1234  阅读(254)  评论(0编辑  收藏  举报