Ios 与#xA0之间的差异;objectAtIndexedSubscript和objectAtIndex

Ios 与#xA0之间的差异;objectAtIndexedSubscript和objectAtIndex,ios,cocoa-touch,nsarray,Ios,Cocoa Touch,Nsarray,我在stackoverflow和其他资源上搜索了很多,没有找到答案 NSArray方法objectAtIndexedSubscript和objectAtIndex之间有什么区别 或者,如果没有区别,为什么两者都存在 在报告中,他们说他们“一模一样” 我对编程非常陌生,但如果它们完全相同,这不是打破了枯燥的原则吗?显然,苹果公司的员工知道他们在做什么,但如果他们是相同的,为什么他们都被提供?或者更好的问题是,为什么我应该使用一个而不是另一个呢?它们是相同的 -objectAtIndex:是您应该使

我在stackoverflow和其他资源上搜索了很多,没有找到答案

NSArray方法
objectAtIndexedSubscript
objectAtIndex
之间有什么区别

或者,如果没有区别,为什么两者都存在

在报告中,他们说他们“一模一样”

我对编程非常陌生,但如果它们完全相同,这不是打破了枯燥的原则吗?显然,苹果公司的员工知道他们在做什么,但如果他们是相同的,为什么他们都被提供?或者更好的问题是,为什么我应该使用一个而不是另一个呢?

它们是相同的

-objectAtIndex:
是您应该使用的方法


-objectAtIndexedSubscript:
是为obj-c下标提供支持的方法。换句话说,如果你说
array[3]
,编译器就会使用这个方法。但是对于
NSArray*
来说,它的作用与
-objectAtIndex:
完全相同。它是另一种方法的原因是,其他类可以实现它,以便支持obj-c下标,而不必使用一般命名的
-objectAtIndex:

有趣的问题,在你问这个问题之前,我甚至不知道
objectatindexsubscript
的存在!谢谢凯文·巴拉德。我在这里找到了更多信息,谢谢您的提醒。@kevin ballard那么,当您执行“数组[3]”和[array objectAtIndex:3]时,是否可以使用“不同的行为”?(其中array是NSArray的子类,其实现的“objectAtIndexSubscript”不同于“objectAtIndex”方法?@bluesm:这是因为编译器不想对方法
-objectAtIndex:
做任何假设,因为它是一个预先存在的方法。相反,它想定义一个新方法,如果类需要
foo[3],它们可以选择实现该方法
行为。恰好在使用
NSArray*
时,
-objectAtIndex:
已经有了正确的行为,因此这两个方法的行为是相同的。请注意,还有
-objectforkeydsubscript:
,允许像
foo[@“bar]”
这样的索引,而
NSDictionary*
使用了它。@KevinBallard sofoo[3]基本上,链接到“ObjectAtinedSubscript:”消息,foo[@“bar”]链接到“objectForKeyedSubscript:”消息。也就是说,对象是否实现这些方法(以及通过实现这种语法工作)取决于程序员。对吗?@bluesm:是的。这些方法的存在使您的自定义容器类可以从
foo[3]中受益
foo[@“bar”]
语法。仅实现
-objectAtIndexedSubscript:
就允许
foo[3]
工作,而
-objectforkeydsubscript:
就允许
foo[@“bar”]
工作。