MST

星途 面试题库

面试题:Objective-C字面量语法创建集合的异常处理

在Objective-C中,使用字面量语法创建数组和字典时,如果在创建过程中传入了`nil`值会发生什么?请通过代码示例说明,并阐述如何避免因传入`nil`值而导致的程序崩溃,同时解释这种设计背后的原因。
19.7万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 使用字面量语法创建数组和字典时传入nil值的情况
    • 数组:在Objective - C中,使用字面量语法@[]创建数组时,如果传入nil值,程序会崩溃。例如:
NSArray *array = @[nil];// 运行时会崩溃
  • 字典:同样,使用字面量语法@{}创建字典时,如果值中包含nil,程序也会崩溃。例如:
NSDictionary *dictionary = @{@"key": nil};// 运行时会崩溃
  1. 避免因传入nil值而导致程序崩溃的方法
    • 数组:在将对象添加到数组字面量之前,先检查对象是否为nil。例如:
id object1 = @"value1";
id object2 = nil;
NSMutableArray *mutableArray = [NSMutableArray array];
if (object1) {
    [mutableArray addObject:object1];
}
if (object2) {
    [mutableArray addObject:object2];
}
NSArray *array = [mutableArray copy];
  • 字典:在将键值对添加到字典字面量之前,检查值是否为nil。例如:
NSString *key1 = @"key1";
id value1 = @"value1";
NSString *key2 = @"key2";
id value2 = nil;
NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];
if (value1) {
    [mutableDictionary setObject:value1 forKey:key1];
}
if (value2) {
    [mutableDictionary setObject:value2 forKey:key2];
}
NSDictionary *dictionary = [mutableDictionary copy];
  1. 这种设计背后的原因
    • 设计目的:这种设计是为了强制开发者在使用字面量语法时,对数据的有效性进行严格检查。它防止了在数组或字典中意外包含nil值,因为nil在这些集合中通常是没有意义的,可能会导致后续代码在访问或处理这些集合时出现未定义行为。
    • 内存管理和数据一致性:从内存管理角度看,如果允许nil值存在于数组或字典中,会给内存管理带来复杂性,例如在释放数组或字典中的对象时,如何处理nil值是个问题。而从数据一致性角度,集合通常用于存储有意义的数据,nil值的存在可能破坏这种一致性。所以直接让程序崩溃可以尽早暴露问题,让开发者及时修正。