24-可变数组NSMutableArray

1. NSMutableArray是NSArray的子类.
1). NSMutableArray仍然是1个数组.具备NSArray数组的特点.
只能存储OC对象.每1个元素的紧密相连的.
2). NSMutableArray相对于父类做的扩展:NSMutableArray数组的元素可以动态的新增和删掉.
其他的用法均与NSArray一致.
所以: NSArray数组一旦创建,其元素的个数就固定,无法新增删除.
NSMutableArray数组.元素可以新增 可以删除. 其他用法和父类一样.
2.NSMutableArray数组的创建.
方式一:
NSMutableArray *arr1 = [NSMutableArray new];
方式二:
NSMutableArray *arr2 = [[NSMutableArray alloc] init];
方式三:
NSMutableArray *arr3 = [NSMutableArray array];
方式四:
NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:10];
这样创建出来的数组对象.数组的元素是0 仍然是有意义的 因为我们可以动态的新增和删除元素.

最常用的两种方式是 方式三和方式四,但是方式四效率更好,因为它一次性开辟10个范围的
内存空间,当不够的时候再开辟10个空间,但是方式三,调用一次添加方法就需要去开辟一次
空间,所以方式四更节约性能。
也可以使用这样的方式来创建可变数组对象.这个数组的元素可以新增和删除.
NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:@"jack",@"rose",@"lili", nil];
最容易犯错:这样写是不可以的
NSMutableArray *arr5 = @[@"jack",@"rose",@"lili"];
@[@"jack",@"rose",@"lili"];这是1个NSArray对象.
arr5是1个子类指针. 子类指针指向父类对象的就有可能会出问题.

---------插入---------
1. 任意的指针其实可以指向任意的对象. 编译不会报错 只会给1个警告.
2. 虽然语法上可以乱指.但是你千万别乱指.因为运行的适合可能出错.
当我们调用指针类型特有的方法的时候.
-------------------------
3. 如何往可变数组中新增元素.
- (void)addObject:(ObjectType)anObject; 将传入的参数作为数组的元素添加进去.
4. 将另外1个数组中的每1个元素添加到可变数组中.
- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;
5. 在可变数组中指定的下标出插入1个元素.
- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;
--------------
6. 删除可变数组中指定下标的元素.
- (void)removeObjectAtIndex:(NSUInteger)index;
7. 删除可变数组中所有的指定的元素.
- (void)removeObject:(ObjectType)anObject;
8. 删除指定范围中的所有指定元素.
- (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;
9. 删除最后1个元素
- (void)removeLastObject;
10.删除所有的元素.
- (void)removeAllObjects;

懒加载
@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *photoList;
@end

@implementation ViewController
//懒加载
- (NSMutableArray *)photoList {
if (_photoList == nil) {
_photoList = [NSMutableArray array];
}
return _photoList;
}
@end


猜你喜欢

转载自blog.csdn.net/daidaishuiping/article/details/80230215