Objective c 同一名称上的类别会发生什么变化?
假设A是B的子类 假设A有一个类别doThis B也有一个类别doThis 我说是的Objective c 同一名称上的类别会发生什么变化?,objective-c,Objective C,假设A是B的子类 假设A有一个类别doThis B也有一个类别doThis 我说是的 B* b = [[B alloc]init]; [b doThis]; 有没有保证B+doThis中声明的doThis.h将被调用而不是a+doThis 样本: 在NSManagedObject+somecategories.m中 +(void)vLoadBookmark { //Just empty } 后者 在BusinessObject+somecategories.m中,BusinessObj
B* b = [[B alloc]init];
[b doThis];
有没有保证B+doThis中声明的doThis.h将被调用而不是a+doThis
样本:
在NSManagedObject+somecategories.m中
+(void)vLoadBookmark
{
//Just empty
}
后者
在BusinessObject+somecategories.m中,BusinessObject是NSManagedObject的子类
+(void)vLoadBookmark
{
//Do something
}
如果有一天我调用了
[someBusinessObject vLoadBookmark]
是否会//做一些事情?如果一个类别覆盖了另一个类别中定义的方法,则未定义将以什么实现为准
来自苹果公司的Objective-C>编程:
如果类别中声明的方法的名称与方法相同
在原始类中,或在同一目录上的另一个类别中的方法中
类(甚至是超类),行为未定义为
方法实现在运行时使用
B有方法doThis,因此将调用doThis。否。这也是BI的一个范畴,你认为你的子类和超类术语混淆了。如果
A
是B
的一个子类,并且您实例化foo=[[B alloc]init]
则[foo anything]
绝对不可能调用A
的实现,因为它不是超类。(*:除非有一些非常非常不明智的内省)给我们一个非常简短的、最低限度的实现你想要的,所以很清楚。