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

objective-c – 为什么NSArray不为不存在的索引返回NULL?,第1张

概述我理解它的方式之一是关于Objective C的一个特别之处在于你可以将消息发送到NULL并且它将忽略它们而不是崩溃. 为什么如果请求的索引超出范围而不是导致NSRangeException,NSArray不会返回NULL对象? 我对Objective C和NSArray的期望如下. NSArray *array = [NSArray arrayWithObjects:@"Object 1", @ 我理解它的方式之一是关于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);    }}

允许我访问数组的索引,不包含对象,只返回NulL.然后我可以检查对象是否存在.我可以在其他地方执行此 *** 作,例如检查对象是否已实例化.

NSArray *array;if (!array) {    array = [NSArray array];}

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

解决方法 消息到nil是语言级功能,而不是框架API功能.

NSArray(和其他类)抛出异常来指示程序员错误是在设计API时做出的有意识的设计决策(~1993).正如凯文和理查德所指出的那样,无论如何,消息不是错误的,而超出界限则是错误输入的情况.

你会在哪里划线? substringWithRange:应该接受任何旧输入吗?怎么样的setobject:atIndex:?

通过在indexOfObject的边界异常上创建NSArray @throw:它使API保持一致;任何超出范围的索引(或范围)都将是@throw.

总结

以上是内存溢出为你收集整理的objective-c – 为什么NSArray不为不存在的索引返回NULL?全部内容,希望文章能够帮你解决objective-c – 为什么NSArray不为不存在的索引返回NULL?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1007504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存