博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发:不可变数组和可变数组的区别分析(NSArray / NSMutableArray)
阅读量:112 次
发布时间:2019-02-27

本文共 3918 字,大约阅读时间需要 13 分钟。

本篇博文分享一个理论知识点,Object-C中可变数组和不可变数组的对比使用,知识比较简单基础,大牛可以忽略。在iOS开发中,一般经常用NSArray类和NSMutableArray类来表示数组,其中NSArray类是NSMutableArray类的父类。在Object-C中,数组是有序的对象的集合,也可以说数组只能存储对象,而且数组中元素类型不能是intfloatCGPoint等类型。

下面就来分析一下不可变数组和可变数组的区别,仅供参考,欢迎指正。

一、NSArray(不可变数组)

NSArray是一个静态数组,不能修改该数组中的元素,也不能往该数组中添加元素。以下是不可变数组常用的一些用法。

1、初始化方法

    ①//创建一个空不不可变的数组(有三种方式)

    NSArray *array1 = [[NSArray alloc] init];

    NSArray *array1 = [NSArray new];

    NSArray *array1 = [NSArray array];

    ②//创建一个里面只有一个元素的不可变数组

    NSArray *array2 = [NSArray arrayWithObject:@“12345”];

    ③//创建一个里面有多个元素的不可变数组,便利构造器创建

    NSArray *array3 = [NSArray arrayWithObjects:@“123”,@“456”,@“789”,@“abc”,@“def”,nil];

    ④//方便快捷的写法,字面量方式创建

    NSArray *array4 = @[@“12345”];//中数组等价

    NSArray *array4 = @[@“123”,@“456”,@“789”,@“abc”,@“def”];//中数组等价

    NSArray *array4 = [NSArray arrayWithArray:array2];

    ⑤//从本地文件中读取数组

    NSArray *array = [NSArray arrayWithContentsOfFile:@""];

    ⑥//从网上URL文件中读取数组

    NSArray *array = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:@""]];

2、数组元素个数(两种方法)

    NSUInteger count = array3.count; //③中数组的数组个数

    或者:

    NSInteger count = [array3 count];

3、访问数组中的元素

    //访问数组中的第一个元素

    NSString *string = [array3 objectAtIndex:0];

    for (int i = 0; i < array3.count; i++) {

        NSLog(@"数组第%d个元素:%@",i,[array3 objectAtIndex:i]);

    }

4、通过数组中的元素查找对应下标

    NSUInteger index = [array3 indexOfObject:@"abc"];

5、判断数组里面是否存在某一个元素

    BOOL flag = [array3 containsObject:@“def”];

6、往不可变数组中添加一个元素,生成一个新的数组

    NSArray *newArray1 = [array3 arrayByAddingObject:@“ghi”];

    NSArray *newArray2 = [array3 arrayByAddingObjectsFromArray:array3];

    NSString *string = [newArray1 componentsJoinedByString:@","];

    NSArray *array6 = @[@"123",@"456",@"789",@"000"];

    NSString *string = [array6 componentsJoinedByString:@"-"];

 

    NSArray *array7 = [string componentsSeparatedByString:@"-"];

    NSString *string2 = [array7 componentsJoinedByString:@""];

7、按照给定的字符串进行截取,将截取的多个部分多段字符串存入数组中

    NSString *string3 = @“123+456+789”;

    NSArray *array8 = [string3 componentsSeparatedByString:@“+”];

8、按照给定的数组元素进行拼接后放入字符串中:

    NSArray *array9 = @[@"1",@"2",@"4",@"3"];

    NSString *string4 = [array9 componentsJoinedByString:@"/"]

二、NSMutableArray(可变数组)

NSMutableArray可变数组是一个可修改、可添加的元素。NSMutableArrayNSArray的子类。

1、初始化方法

    ①//初始化一个可变数组

    NSMutableArray *mArray1 = [NSMutableArray new];  或者

    NSMutableArray *mArray1 = [NSMutableArray array];

   ②//初始化多个元素的可变数组

    NSMutableArray *mArray2 = [NSMutableArray arrayWithObject:@"1"];

    NSMutableArray *mArray3 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4", @“5”,@“6”,nil];

    NSMutableArray *mArray4 = [NSMutableArray arrayWithArray:mArray2];

    ③//可变数组从不同地方读取数组

    NSMutableArray *mArray5 = [NSMutableArray arrayWithCapacity:10];

    NSMutableArray *mArray6 = [NSMutableArray arrayWithContentsOfFile:@""];

    NSMutableArray *mArray7 = [NSMutableArray arrayWithContentsOfURL:@""];

2、增加数组元素

    ①//在数组的末尾添加一个元素

    [mArray3 addObject:@“7”];

    ②//在数组的指定位置添加一个元素

    [mArray3 insertObject:@“def” atIndex:2];  //添加def到数组下标为2的位置

3、数组元素替换

    //将数组指定位置上的元素替换成用户想要的新的元素

    [mArray3 replaceObjectAtIndex:3 withObject:@“adc”];

4、数组元素交换位置

    [mArray3 exchangeObjectAtIndex:2 withObjectAtIndex:3];

5、删除数组元素

    ①//删除数组中指定元素

    [mArray3 removeObject:@“4”];

    ②//根据下标删除数组中的元素

    [mArray3 removeObjectAtIndex:5];

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

    [mArray3 removeLastObject];

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

    [mArray3 removeAllObjects];

6、快速遍历数组元素

    //for循环遍历数组元素

    for (NSString *object in mArray3) {

        NSLog(@“%@===“, object);

    }

7NSMutableArray常用函数

     ①创建一个数组,指定容量为size

     +(id)arrayWithCapacity:size

     ②初始化数组,指定容量为size

     -(id)initWithCapacity:size

     ③将对象object添加到数组最后一位

      -(void)addObject:object

      ④将对象object插入到索引为a的位置

      -(void)insertObject:object atIndex:a

      ⑤将数组中下标为a处的元素用object置换

      -(void)replaceObject:object atIndex:a

      ⑥从数组中删除object对象

      -(void)removeObject:object

      ⑦从数组中删除下标为a的对像

      -(void)removeObjectAtIndex:a

      ⑧从数组中删除所有的object

      -(void)removeAllObjects

     ⑨ selector方法将数组排序

     - (void)sortUsingSelector:(SEL)selector

顺便再分享一下上一篇博文发的那个遍历数组的例子,如下图所示:

上面的思路也就是拿到数据源之后,新建一个数组,然后for循环遍历,取出需要的元素,然后存到一个新的可变数组中,然后再把可变数组的值赋值给需要的地方。

以上就是本章全部内容,欢迎关注三掌柜的微信公众号、微博,欢迎关注!

三掌柜的微信公众号:

三掌柜的新浪微博:

 

转载地址:http://yslf.baihongyu.com/

你可能感兴趣的文章