当参数为nil时,NSArray和NSMutableArray的+arrayWithArray:
返回空数组而不是nil。
NSLog(@"%@", [[NSArray arrayWithArray:nil] class]);
NSLog(@"%@", [[NSMutableArray arrayWithArray:nil] class]);
输出:
__NSArrayI
__NSArrayM
但苹果文档中未记录此行为。
依赖arrayWithArray:nil
返回空数组的假设是否安全?
或者我应该像这样明确地指定空数组:
NSDictionary *dic = [[NSDictionary alloc] init];
NSMutableArray *arr = [dic objectForKey:@"a"];
if (!arr) {
arr = [[NSMutableArray alloc] init];
}
答案 0 :(得分:5)
+arrayWithArray:
的文档说:
创建并返回包含另一个给定对象的数组 阵列。
当然,nil
不是数组,但[nil count]
有效且返回0
,因此可能会将其视为空数组。
但我不会依赖这个事实并使用[[NSMutableArray alloc] init]
或[NSMutableArray array]
创建空数组。
<强>增加:强>
如果您使用无效类型致电+arrayWithArray:
,例如一个NSString
,当然程序会抛出异常。但是从错误消息
-[__NSCFConstantString count]: unrecognized selector sent to instance 0x69e4
你可以看到count
确实是用于复制数组元素的第一种方法。这也解释了为什么它适用于nil
。