Rya*_*los 4 cocoa objective-c nsarray
我理解它的方式之一是关于Objective C的一个特别之处在于你可以将消息发送到NULL并且它将忽略它们而不是崩溃.
为什么如果请求的索引超出范围而不是导致NSRangeException,NSArray不会返回NULL对象?
我对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);
}
}
Run Code Online (Sandbox Code Playgroud)
允许我访问数组的索引,不包含对象,只返回NULL.然后我可以检查对象是否存在.我可以在其他地方执行此操作,例如检查对象是否已实例化.
NSArray *array;
if (!array) {
array = [NSArray array];
}
Run Code Online (Sandbox Code Playgroud)
我意识到这是一个基于理论的问题,但我很好奇:)
消息到nil是语言级功能,而不是框架API功能.
那个NSArray(以及其他类)抛出异常来指示程序员错误是在设计API时做出的有意识的设计决策(~1993).正如凯文和理查德所指出的那样,nil eats message无论如何都不是错误的,而是out of bounds非常错误的输入.
你会在哪里划线?应该substringWithRange:接受任何旧的输入?怎么样setObject:atIndex:?
通过使NSArray @throw在边界上的异常indexOfObject:使得API保持一致; 任何超出范围的索引(或范围)都将@throw.
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |