gpt4 book ai didi

objective-c - 为什么 NSArray 不为不存在的索引返回 NULL?

转载 作者:太空狗 更新时间:2023-10-30 03:58:20 24 4
gpt4 key购买 nike

我理解它的方式之一是 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];
}

我意识到这是一个基于理论的问题,但我很好奇:)

最佳答案

Messages to nil 是语言级别的功能,而不是框架 API 功能。

NSArray(和其他类)抛出异常以指示程序员错误是在设计 API 时做出的有意识的设计决定(~1993)。正如 Kevin 和 Richard 所指出的,nil eats message 无论如何都没有错误,而 out of bounds 很大程度上是错误输入的情况。

你会在哪里画线? substringWithRange: 是否应该接受任何旧输入? setObject:atIndex: 怎么样?

通过为 indexOfObject: 设置 NSArray @throw on bounds 异常,它使 API 保持一致; 任何超出范围的索引(或范围)都将@throw

关于objective-c - 为什么 NSArray 不为不存在的索引返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com