我在技术讨论中被问到这个问题,似乎无法在任何地方找到答案。
问题:
如果我通过扩展核心类来编写方法(让我们说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.
现在,在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(从虚拟表中查找)。但是,我没有被告知正确的答案,现在已经困扰了我几个星期。
感谢任何解释/帮助。
答案 0 :(得分:2)
如您所知,任何子类都可以覆盖现有方法。即使在这里,你最终也会调用你的方法。即覆盖。
答案 1 :(得分:0)
这就是为什么你不应该把它称为“信息”。您应该使用三个字母前缀(Apple保留两个字母前缀),例如abcInfo。
答案 2 :(得分:0)
你扩展 NSArray类,这意味着如果你实现info
方法,你的方法将被调用,因为你 ovveriding 是默认的info
方法。
实现viewDidLoad
方法之类的方法时也是如此。你必须像这样实现它:
- (void)viewDidLoad {
[super viewDidLoad];
// Your initialization
}
你必须调用 super 方法,因为你要覆盖它,这意味着不再调用超类viewDidLoad方法。