特性区别
- NSArray:
- 不可变:一旦创建,其内容不能被修改,元素数量和元素值都固定。
- 线程安全:多个线程同时读取NSArray是安全的,因为其内容不会被改变。
- NSMutableArray:
- 可变:可以动态添加、删除和修改元素,灵活性高。
- 非线程安全:在多线程环境下,如果多个线程同时对NSMutableArray进行修改操作,可能会导致数据不一致等问题,需要额外的同步机制(如锁)。
使用场景区别
- NSArray:
- 当数据不需要改变时使用,如配置信息、固定的选项列表等。例如,应用支持的语言列表:
NSArray *languages = @[@"English", @"Chinese", @"French"];
- NSMutableArray:
- 数据需要动态变化的场景,如用户在应用中动态添加的收藏列表。例如,用户收藏文章:
NSMutableArray *favoriteArticles = [NSMutableArray array];
Article *article1 = [[Article alloc] initWithTitle:@"Article 1"];
Article *article2 = [[Article alloc] initWithTitle:@"Article 2"];
[favoriteArticles addObject:article1];
[favoriteArticles addObject:article2];
二者转换
- NSArray 转 NSMutableArray:
可以通过
mutableCopy
方法将NSArray转换为NSMutableArray。
NSArray *array = @[@1, @2, @3];
NSMutableArray *mutableArray = [array mutableCopy];
- NSMutableArray 转 NSArray:
可以通过
copy
方法将NSMutableArray转换为NSArray。
NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
NSArray *array = [mutableArray copy];