Objective - C NSArray不可变数组和NSMutableArray可变数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective - C NSArray不可变数组和NSMutableArray可变数组相关的知识,希望对你有一定的参考价值。

OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法。   

OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型。

不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素。

 创建一个不可变数组对象

    //1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号)

    NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger",@"honghuang",@"taixu",@"zhili", nil]; //nil不是对象,只是一个标志,告诉编译器数组赋值结束

    //2.便利构造器

    NSArray *array2 = [NSArray arrayWithObjects:@"zhuba",@"bada",@"zhonger",@"duliu", nil];

 打印出的数据以()内容显示,比如:

array1 is (
    zhonger,
    honghuang,
    taixu,
    zhili
)

    //3.笑笑语法 语法糖,字面量  这是不可变数组的写法。。。

    //OC中的数组可以存放不同类型的对象

    NSArray *array3 = @[@"yousiyi", @"huangshenme", @"shuishen", @"qiuxiang", @12];

//数组的两个核心方法  count  objectAtIndex:

    //count 求数组元素个数

    unsigned long count = [array1 count];

    NSLog(@"array1count is %lu",count);    //可以打印出元素的个数

    

    //objectAtIndex:通过给定的下标,找到相应的元素

    NSString *bada = [array2 objectAtIndex:1];

    NSLog(@"bada is %@",bada);

    NSString *zhonger = array2[2];  //语法糖表达方式 

    NSLog(@"zhonger is %@",zhonger);  

    

    //遍历array3里面的每一个元素

    unsigned long count1 = [array3 count];

    for (int i = 0; i < count1; i ++) {

        NSLog(@"%@",array3[i]);//语法糖

    }

    

    //判断数组中是否包含某个元素

    BOOL isTrue = [array2 containsObject:@"zhuba"];

    NSLog(@"isTrue is %d",isTrue);

    

    //获取某个元素所在的数组下标

    NSUInteger index = [array2 indexOfObjectIdenticalTo:@"bada"];

    NSLog(@"index is %lu",index);

 

    //通过数组来实现分割字符串,拼接字符串、

   //以空格分隔字符串

    NSString *str = @"zhonger m 19 m";

    NSArray *resultArray = [str componentsSeparatedByString:@" "];

   //以66666拼接字符串

    NSArray *rArray = @[@"bada", @"qiuxiang",@"zaiyiqi"];

    NSString *str1 = [rArray componentsJoinedByString:@"66666"];

 

//至于可变数组,在不可变数组的情况下,提供了增删改的操作,让数组功能变得更加多样化

    //1.创建一个可变数组

    NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:0];

    //2.便利构造器

    NSMutableArray *mArr1 = [NSMutableArray arrayWithCapacity:0];

    

    //3.可变数组的字面量创建方式

    NSMutableArray *mArr2 = [@[@"zhonger", @"dada", @"zhuzhu", @"linlin"]mutableCopy];

 

    //往可变数组里添加元素,addobject

    [mArr2 addObject:@"addobject"];

 

    //往可变数组的指定位置插入一个新的元素  insertObject

    [mArr2 insertObject:@"charu" atIndex:1];

    

    //移除可变数组中的某一元素

    //通过下标

    [mArr2 removeObjectAtIndex:4];

    NSLog(@"mArr2 is %@",mArr2);

    //通过指定内容

    [mArr2 removeObject:@"zhuzhu"];

    NSLog(@"mArr2 is %@",mArr2);

    //删除数组中最后一个元素

    [mArr2 removeLastObject];

    NSLog(@"mArr2 is %@",mArr2);

    //删除数组中所有的元素

    //[mArr2 removeAllObjects];

    //NSLog(@"mArr2 is %@",mArr2);

    

    //替换可变数组中的元素

    [mArr2 replaceObjectAtIndex:0 withObject:@"gou"];

    [mArr2 replaceObjectAtIndex:1 withObject:@"taixu"];

    NSLog(@"mArr2 is %@", mArr2);

    

    //交换可变数组中两个元素的位置

    [mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:1];

     NSLog(@"mArr2 is %@", mArr2);

    

注意:无论是不可变还是可变数组,如果是在MRC环境下,只要加入这个数组中,都是导致引用计数加1,作为三大容量之一,数组存放的是有序的对象,不同于字典的有序,数组可以实现排序。

以上是关于Objective - C NSArray不可变数组和NSMutableArray可变数组的主要内容,如果未能解决你的问题,请参考以下文章

从Objective C中的NSArray转换时如何比较String?

Objective C /iPhone:是不是可以重新初始化 NSArray?

将 NSArray 对象写入领域数据库 - Objective C

将 NSArray 中的每个 NSString 元素显示为 UIButton Objective C

如何比较在Objective C中从NSArray转换的String?

如何在Objective C的NSArray中添加字体真棒图标