【发布时间】:2012-05-28 08:13:07
【问题描述】:
据我了解,Objective C 的特别之处之一是您可以将消息发送到 NULL,它只会忽略它们而不是崩溃。
为什么如果请求的索引超出范围,NSArray 不只是返回 NULL 对象,而不是导致 NSRangeException?
我对 Objective C 和 NSArray 的期望如下。
NSArray *array = [NSArray arrayWithObjects:@"Object 1", @"Object 2", @"Object 3", nil];
for (int i = 0; i < 5; i++) {
NSString *string = [array objectAtIndex:i];
if (string) {
NSLog(@"Object: %@",string);
}
}
允许我使用不包含对象并简单地返回 NULL 来访问数组的索引。然后我可以检查对象是否存在。我可以在其他地方执行此操作,例如检查对象是否已实例化。
NSArray *array;
if (!array) {
array = [NSArray array];
}
我意识到这是一个基于理论的问题,但我很好奇 :)
【问题讨论】:
-
Messaging nil 与请求越界索引完全不同。我不明白你为什么要在这里建立联系。
-
因为它没有意义。访问程序分配之外的内存是未定义的行为。未定义的行为不应该是程序所依赖的东西,相反,它应该是程序努力删除的东西。现在,诚然,NSArray 不是数组,但在大多数情况下它必须遵循数组的范式。
标签: objective-c cocoa nsarray