1

说 A 是 B 的子类

假设 A 有一个类别 doThis。

B 也有一个类别 doThis。

说我做了

B* b = [[B alloc]init];
[b doThis];

是否可以保证在 B+doThis.h 中声明的 doThis 将被调用而不是 A+doThis?

样本:

在 NSManagedObject+somecategories.m

+(void)vLoadBookmark
{
   //Just empty
}

后者

在 BusinessObject+somecategories.m 中,其中 BusinessObject 是 NSManagedObject 的子类

+(void)vLoadBookmark
{
   //Do something

}

如果有一天我打电话[someBusinessObject vLoadBookmark]会//做某事吗?

4

1 回答 1

5

如果一个类别覆盖了另一个类别中定义的方法,则不确定哪种实现将占上风。

来自 Apple 的 Programming with Objective-C > Avoid Category Method Name Clashes

如果在一个类别中声明的方法的名称与原始类中的方法相同,或者与同一类(甚至是超类)上的另一个类别中的方法相同,则对于在哪个方法实现中使用的行为是不确定的运行。

于 2013-06-19T02:31:41.167 回答