黑马程序员---Foundation常用类之NSArray/NSMutableArray

———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———

二:NSArray/NSMutableArray

NSArray :不可变数组

NSMutableArray : 可变数组

OC数组不能存放nil

OC数组只能存放OC对象、不能存放非OC对象类型,比如intstructenum

 NSArray *array = [NSArray array]; //NSArray是不可变数组,创建的时候没有说明元素,所以这个array永远是空数组

1.NSArray的创建

1.NSArray的创建
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
    
    // nil是数组元素结束的标记,所以数组不能存放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的元素个数:

[arrary2 count]; //get方法
NSLog(@"%ld", array3.count);// 用点语法

3.NSArray中元素的访问

    NSLog(@"%@", [array3 objectAtIndex:1]);//这种方法很麻烦
    //array3[1];
    NSLog(@"%@", array3[0]);// 利用数组名加数组下标

遍历:

第一种方式:for循环

Person *p = [[Person alloc] init];
    
    NSArray *array = @[p, @"rose", @"jack"];
    
        for (int i = 0; i<array.count; i++)
        {
            NSLog(@"%@", array[i]);
        }// 打印结果是:<Person :内存地址>,Rose,Jack 因为打印Person对象默认的就是<类名:内存地址>
第二种方式:快速遍历

     id obj代表着数组中的每一个元素
    int i = 0;
        for (id obj in array)
        {
            // 找出obj元素在数组中的位置
            NSUInteger i = [array indexOfObject:obj];
    
            NSLog(@"%ld - %@", i, obj);
            //i++; //可以在外面定义i=0,然后在这里i++
    
            if (i==1) //如果想要退出循环,那么可以自定义,遍历到那个位置时退出
            {
                break;
            }

 第三种方式:用block遍历 

[array enumerateObjectsUsingBlock:
     
     // 每遍历到一个元素,就会调用一次block
     // 并且当前元素和索引位置当做参数传给block
     ^(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;
            }
     }

NSMUtableArray 可变数组

是NSArray的子类,所以NSArray的方法,NSMUtableArray都可以用。

NAMUtableArray的创建方式

1.NSMutableArray *array = [NSMutableArray array]; //用array方法创建了一个空的数组 array 

    // 向数组array中添加元素

    [array addObject:[[Person alloc] init]]; // 添加一个Person对象 

    [array addObject:@"jack"]; // 添加一个字符串"jack"

此时,数组中有两个元素

 注意:不能够添加基本数据类型

//也可以一开始就定义一些元素

2.NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"rose"@"jim"nil];

   删除元素

 array removeAllObjects];  // 删除所有元素

 [array removeObject:@"jack"]; // 删除指定对象

  [array removeObjectAtIndex:0]; // 删除指定位置的元素

    注意:

 @[ ] 返回的是NSArray对象,只创建不可变数组NSArray,不可以创建可变数组NSMutableArray

错误写法:

    NSMutableArray *array = @[@"jack", @"rose"];

    [array addObject:@"jim"]; //报错,不能识别的消息发送给了某个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值