【转】不可变数组NSArray与可变数组NSMutableArray

原文网址:http://www.jianshu.com/p/1ad327f56d1d

不可变数组NSArray

    //创建一个空数组
    NSArray *array = [NSArray array];
    //这样创建是没有意义的.

    //创建只有一个元素的数组 NSArray *array1 = [NSArray arrayWithArray:@"a"]; NSArray *array2 = [NSArray arrayWithObject:@"b"]; //使用便利构造器创建有多个元素数组 NSArray *array3 = [NSArray arrayWithObjects:@"Hola",@"Bonjour",@"Guten",@"Tag", nil]; //注意最后有nil //创建数组,有多个元素 使用对象方法 NSArray *array4 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", @"4",nil]; //用一个数组创建另一个数组 NSArray *array5 = [NSArray arrayWithArray:array3]; //在控制台打印数组中的所有对象 使用数组名 NSLog(@"%@",array5); //在控制台打印数组中的某个对象 使用数组名 + 下标法 NSLog(@"%@",array5[0]);

一些常用用法:

    NSArray *array = [NSArray arrayWithObjects:@"Hola",@"Guten",@"Tag",@"Bonjour", nil]; //1.获取数组的元素个数 使用count NSLog(@"%ld",[array count]); //2.根据下标获取下标对应的对象 NSLog(@"%@",[array objectAtIndex:2]); // 此处[]不能用.代替 //3.通过元素找下标 NSUInteger r = [array indexOfObject:@"three"]; NSLog(@"%ld",r); //4.判断数组中是否包含了某个元素 BOOL r1 = [array containsObject:@"one"]; if (r1) { NSLog(@"包含这个元素!"); }else{ NSLog(@"没找着!"); }

简化的创建方式 (语法糖):

    NSArray *array = @[@"one",@"two",@"three",@"four"];

简化的访问方式(通过元素下标来访问)

    NSString *str = array[2];
    NSLog(@"%@",str);

数组遍历:

    //第一种方式: 普通遍历 -- 通过下表访问
    for (int i = 0; i < array.count; i++) { NSLog(@"%@",array[i]); } //第二种方式: 快速枚举法--for循环的增强版 for (NSString *obj in array) { NSLog(@"%@",obj); } //第三种方式: 使用block进行遍历 [array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if (idx == 2) { //idx是下标 *stop = YES; }else{ NSLog(@"下标为:%ld 对象为%@",idx,obj); } }];

可变数组NSMutableArray

可变数组NSMutableArray 继承于 不可变数组NSArray

    //1.创建一个空数组
         NSMutableArray *array =[NSMutableArray array];
    //2.维数组追加元素 [array addObject:@1]; //3.创建数组,添加多个元素 NSMutableArray *array2 = [NSMutableArray arrayWithCapacity:5]; //添加5个元素 [array2 addObject:@1]; array2[1] = @2; array2[2] = @3; array2[3] = @4; array2[4] = @5; //输出数组 NSLog(@"%@",array2);

可变数组有而不可变数组没有的一些操作:

    //插入 insert
        [array2 insertObject:@6 atIndex:0];
        NSLog(@"%@",array2); //替换 replace [array2 replaceObjectAtIndex:0 withObject:@0]; NSLog(@"%@",array2); //删除 remove [array2 removeLastObject]; NSLog(@"%@",array2); //是否包含 contain BOOL r = [array2 containsObject:@2]; //此方法有返回值 if (r) { NSLog(@"包含!"); } else { NSLog(@"不包含!"); } //交换元素 exchange [array2 exchangeObjectAtIndex:0 withObjectAtIndex:2]; NSLog(@"%@",array2);

一个典型的错误用法:

//        NSMutableArray *array =@[@1,@2,@3,@4,@5]; // [array addObject:@"hello"]; // NSLog(@"%@",array3);

注: 语法糖是为不可变对象设立的,如果创建可变对象时,使用语法糖,会报黄,创建之后,再为此空间添加对象,程序会抛出异常,因为在运行时,默认是不可变的数组.



文/请叫我大圣(简书作者)
原文链接:http://www.jianshu.com/p/1ad327f56d1d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

你可能感兴趣的:(【转】不可变数组NSArray与可变数组NSMutableArray)