OC--NSMutableArray可变数组

NSMutableArray继承自NSArray,所以,在上一篇文章中提到的属性和方法,在这里是适用的,但是也有不同的地方,既然是可变的,可动态分配的,那么他的创建就和NSMutableString一样先要去申请内存。所以NSMutableArray的创建和初始化就应该和NSMutableString的形式相同了。而不能够适用NSArray的简化形式。

说NSMutableArray之前我们先来看一段代码:

NSArray *arr = @[@"aaa"@"bbb"];

        NSLog(@"%p", &arr);//数组的地址

        NSLog(@"%@", arr);//数组

        

        arr = [arr arrayByAddingObject:@"ddd"];//数组添加操作

        NSLog(@"%p", &arr);//数组地址

        NSLog(@"%@", arr);//数组

打印结果:

2017-03-20 15:26:28.392 OCdemo[1259:152466] 0x7fff5fbff7e0

2017-03-20 15:26:28.393 OCdemo[1259:152466] (

    aaa,

    bbb

)

2017-03-20 15:26:28.393 OCdemo[1259:152466] 0x7fff5fbff7e0

2017-03-20 15:26:28.393 OCdemo[1259:152466] (

    aaa,

    bbb,

    ddd

)

Program ended with exit code: 0

通过打印结果会发现数组在添加后的地址是不变的,这样是不是上一篇文章中说的在数组操作的时候,其实是有一个新的数组产生了这个说话就错了?当然不是得,这里打印的地址是数组第一个元素的地址,也就是arr[1]的地址,在给数组添加元素的时候,数组的第一个元素并没有改变,所以这里打印的地址也就不会变还是只想数组第一个元素@“aaa”的指针。


1、可变数组创建。

可变数组的创建,其实就是向内存去申请空间的操作:

+ (instancetype)arrayWithCapacity:(NSUInteger)numItems;

这个方法就是创建一个可变数组对象的类方法, numItems表示要申请的数组的长度。

例如:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:20];

就是创建了一个名为array的可变数组,并且数组长度为20

当然还有一种情况存在,那就是在我创建一个可变数组的时候,我并不知道我要申请多少的空间,这个时候动态就体现了出来,只需要将numItems的值设置为0,即可在初始化的时候动态分配空间。

创建一个数组的init方法

- (instancetype)init NS_DESIGNATED_INITIALIZER;

创建一个可变数组,并设置数组长度

- (instancetype)initWithCapacity:(NSUInteger)numItems NS_DESIGNATED_INITIALIZER;

创建一个可变数组,并将反归档数据分配给这个数组。以后在数据持久化存储里详细说明

- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;



2、可变数组操作方法

给数组中添加元素:

给数组中添加一个元素,这中添加是在数组的最后添加一个元素

- (void)addObject:(ObjectType)anObject;

在指定的下标位置,给数组中添加一个元素

- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;

代码示例:

        NSArray *arr = @[@"aaa"@"bbb"];

        //创建数组

        NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];

        //初始化赋值

        array = [NSMutableArray arrayWithArray

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值