Ios 现在由cocoa库定义的自定义方法

Ios 现在由cocoa库定义的自定义方法,ios,iphone,objective-c,Ios,Iphone,Objective C,我在一次技术讨论中被问到这个问题,但似乎在任何地方都找不到答案 问题是: 如果我通过扩展一个核心类(比如说NSArray)来编写方法,这个核心类在iOS 5中不存在,但在iOS 6中引入 当用户升级到iOS 6时,我在应用商店中的应用程序会发生什么情况?它会崩溃吗?这是基础课吗?运行时会指向我的函数吗?所有的东西都会继续工作吗 例如 iOS 5.0 PGMyArray:NSArray - (NSString) info; // convert and concatenate each objec

我在一次技术讨论中被问到这个问题,但似乎在任何地方都找不到答案

问题是:

如果我通过扩展一个核心类(比如说
NSArray
)来编写方法,这个核心类在iOS 5中不存在,但在iOS 6中引入

当用户升级到iOS 6时,我在应用商店中的应用程序会发生什么情况?它会崩溃吗?这是基础课吗?运行时会指向我的函数吗?所有的东西都会继续工作吗

例如

iOS 5.0

PGMyArray
NSArray

- (NSString) info; // convert and concatenate each object of the array into a string.
- (NSString) info; // Does exactly same as my method
现在在iOS 6.0中,苹果公开引入了这种方法,作为NSArray的一部分

- (NSString) info; // convert and concatenate each object of the array into a string.
- (NSString) info; // Does exactly same as my method
NSArray

- (NSString) info; // convert and concatenate each object of the array into a string.
- (NSString) info; // Does exactly same as my method
当用户升级到iOS 6.0并调用我的应用程序时会发生什么

PGMyArray *myArray = [[NSArray alloc] init];
[myArray info];
我的明智猜测是,它仍然会调用PGMyArray->info(在从虚拟表中查找之后)。然而,我没有得到正确的答案,这困扰了我好几个星期


感谢您的任何解释/帮助。

这就是为什么您不应该称之为“信息”。您应该使用三个字母的前缀(两个字母的前缀由Apple保留),比如abcInfo

如您所知,任何子类都可以重写现有方法。即使在这里,您最终也会调用您的方法。i、 e.重写它。

您正在扩展NSArray类,这意味着如果实现
info
方法,将调用您的方法,因为您正在验证默认的
info
方法

当您实现一些方法(如
viewDidLoad
方法)时也是如此。您必须像这样实施它:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Your initialization
}

您必须调用super方法,因为您正在重写它,这意味着不再调用super class viewDidLoad方法。

前缀用于类名,而不是属性或类别。可能在@AnoopVaidya找到答案:当然,为类别方法添加前缀以避免名称冲突是有意义的。@MartinR:我从未使用过任何前缀,直到现在才用于方法(类别),因为从来没有想过重写或这样的方法名冲突!!!我曾经写过一个确切的例子来测试它,看看会发生什么。但是我太懒了,找不到结果。我找不到
NSArray
info
方法。这是理论上的例子吗?是的。这是一个理论上的例子。