Objective c 同一名称上的类别会发生什么变化?

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

假设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中,BusinessObject是NSManagedObject的子类

+(void)vLoadBookmark
{
   //Do something

}

如果有一天我调用了
[someBusinessObject vLoadBookmark]
是否会//做一些事情?

如果一个类别覆盖了另一个类别中定义的方法,则未定义将以什么实现为准

来自苹果公司的Objective-C>编程:

如果类别中声明的方法的名称与方法相同 在原始类中,或在同一目录上的另一个类别中的方法中 类(甚至是超类),行为未定义为 方法实现在运行时使用


B有方法doThis,因此将调用doThis。否。这也是BI的一个范畴,你认为你的子类和超类术语混淆了。如果
A
B
的一个子类,并且您实例化
foo=[[B alloc]init]
[foo anything]
绝对不可能调用
A
的实现,因为它不是超类。(*:除非有一些非常非常不明智的内省)给我们一个非常简短的、最低限度的实现你想要的,所以很清楚。