9.23 数组Array

与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的地址

打印结果如下:

9.23 数组Array_第1张图片
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)