MST

星途 面试题库

面试题:Objective-C中NSArray与可变数组NSMutableArray的区别

请详细阐述Objective-C里NSArray和NSMutableArray在特性、使用场景等方面的区别,并举例说明如何在二者之间进行转换。
39.6万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

特性区别

  1. NSArray
    • 不可变:一旦创建,其内容不能被修改,元素数量和元素值都固定。
    • 线程安全:多个线程同时读取NSArray是安全的,因为其内容不会被改变。
  2. NSMutableArray
    • 可变:可以动态添加、删除和修改元素,灵活性高。
    • 非线程安全:在多线程环境下,如果多个线程同时对NSMutableArray进行修改操作,可能会导致数据不一致等问题,需要额外的同步机制(如锁)。

使用场景区别

  1. NSArray
    • 当数据不需要改变时使用,如配置信息、固定的选项列表等。例如,应用支持的语言列表:
NSArray *languages = @[@"English", @"Chinese", @"French"];
  1. 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];

二者转换

  1. NSArray 转 NSMutableArray: 可以通过 mutableCopy 方法将NSArray转换为NSMutableArray。
NSArray *array = @[@1, @2, @3];
NSMutableArray *mutableArray = [array mutableCopy];
  1. NSMutableArray 转 NSArray: 可以通过 copy 方法将NSMutableArray转换为NSArray。
NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
NSArray *array = [mutableArray copy];