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

时间:2014-03-18 10:38:11

标签: ios iphone objective-c

我在技术讨论中被问到这个问题,似乎无法在任何地方找到答案。

问题:

如果我通过扩展核心类来编写方法(让我们说NSArray)在iOS 5中不存在但在iOS 6中引入。

当用户升级到iOS 6时,我在应用商店中的应用会发生什么?会崩溃吗?它会参考基础课吗?运行时是否指向我的功能,一切都将继续工作?

例如

iOS 5.0

PGMyArrayNSArray

- (NSString) info; // convert and concatenate each object of the array into a string.

现在,在iOS 6.0中,Apple将该方法作为NSArray

部分公开引入

NSArray

- (NSString) info; // Does exactly same as my method

当用户升级到iOS 6.0和我的应用程序调用

时会发生什么
PGMyArray *myArray = [[NSArray alloc] init];
[myArray info];

我的智能猜测是,它仍然会调用PGMyArray-> info(从虚拟表中查找)。但是,我没有被告知正确的答案,现在已经困扰了我几个星期。

感谢任何解释/帮助。

3 个答案:

答案 0 :(得分:2)

如您所知,任何子类都可以覆盖现有方法。即使在这里,你最终也会调用你的方法。即覆盖

答案 1 :(得分:0)

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

答案 2 :(得分:0)

扩展 NSArray类,这意味着如果你实现info方法,你的方法将被调用,因为你 ovveriding 是默认的info方法。

实现viewDidLoad方法之类的方法时也是如此。你必须像这样实现它:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Your initialization
}

你必须调用 super 方法,因为你要覆盖它,这意味着不再调用超类viewDidLoad方法。