美文网首页
9.23 数组Array

9.23 数组Array

作者: jayck | 来源:发表于2016-09-23 19:28 被阅读24次

    与Swift的数组不同,Swift的数组直接用let, var来区分此数组是不是可以改变的。OC里的数组没那么简单实现。需要用到方法,如下:

    可变方法一:

    先定义_datas为可变的数组

    @interface ViewController ()
    {
        NSMutableArray *_datas;  //定义_datas为可变数组
    }
    @end
    
    进行初始化
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
         _datas = [NSMutableArray array];   //初始化_datas
       
    赋值
        [_datas addObject:@"22"];   //直接给_datas赋值
        NSLog(@"_datas = %@",_datas);
    }
    @end
    

    方法二:

    把一个array数组.mutablecopy, 变成可变数组

    NSMutableArray *mutiArray =  array. mutableCopy;
        
        NSLog(@"mutiArray:%@",mutiArray);
       
        [mutiArray addObject:@00];    //在最后面添加00
        [mutiArray insertObject:@100 atIndex:0];  //在第0位添加100
        
        NSLog(@"mutiArray:%@",mutiArray);
    
        mutiArray[0] = @200;    //第0位的值改为200
        NSLog(@"mutiArray:%@",mutiArray);
        
        [mutiArray removeObjectAtIndex:0];    //删除第0位的值
    
        if([mutiArray containsObject:@200]){   //判断mutiArray里面有没有包含@200这个值,如果有就进入这个大括号里打印下面的字符串.
    
            NSLog(@"contain @200");
        }
    

    用枚举方法可以实现遍历数组里的下标和对应的值.

    而且在写代码的时候,只要写[array enum 再敲几个回车就会有写好的方法了,非常方便。
    假设我们在第2位的时候停止,(只能写*stop。enum没有break这个方法。)
    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
           
            if(idx == 2){
            
                *stop = YES;
            }
            NSLog(@"%ld>>>>>%@",idx,obj);
        }]
    

    打印结果如下:

    Paste_Image.png

    不可变数组:

    不可变数组是不可以改变里面的值的,否则会挂
    .copy后两个Array的地址相同,

       NSArray *arr = @[@11,@22];
    //    NSMutableArray *mutiArray = (NSMutableArray*)arr;
        NSMutableArray *mutiArray = arr.copy;
    //    [mutiArray addObject:@33];     不可变数组不能直接赋值,否则直接挂。
        
        NSLog(@"mutiArray:%@",mutiArray); //打印mutiArray的值
       
        NSLog(@"%p",arr);           //打印arr的地址
        NSLog(@"%p",mutiArray);     //打印mutiArray的地址
    

    打印结果如下:

    Paste_Image.png

    总结:

    不管A,B是不是可变的数组对象。copy后都是不可变的。

    不管A,B是不是可变的数组对象。mutablecopy后都是可变的。

    如果A是不可变的数组,copy以后的对象B,和A是同一个地址。

      NSArray *arr = @[@11,@22];
      NSArray *arr2 = arr.copy;    
      NSLog(@"%p",arr);
      NSLog(@"%p",arr2);
    

    如果A本身是可变的数组,copy以后的对象B,和A不是同一个地址。

      NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@11,@22, nil];
      NSArray *arr4 = arr3.copy;
      NSLog(@"%p",arr3);
      NSLog(@"%p",arr4);
    

    打印结果如下:

    Paste_Image.png

    相关文章

      网友评论

          本文标题:9.23 数组Array

          本文链接:https://www.haomeiwen.com/subject/nootyttx.html