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