Objective c 使用category在目标C类中添加冲突的方法

Objective c 使用category在目标C类中添加冲突的方法,objective-c,objective-c-category,Objective C,Objective C Category,我已将方法foo添加到类别Category1中的类MYCustomClass,与类的原始定义分离。然后,我在另一个类别Category2中添加了另一个方法,也称为foo。然后,我对MYCustomClass的一个实例调用foo。在我的例子中,正在调用Category2中的foo。我的问题是:这有什么解释吗?或者,这是一种“未定义”/“依赖于编译器”的行为。另外,通过指定我希望在调用中使用的类别来限定方法调用是否可以处理这种情况 编辑:我知道我正在做的事情不受支持。我只是对它周围是否有黑客感兴趣。

我已将方法
foo
添加到类别
Category1
中的类
MYCustomClass
,与类的原始定义分离。然后,我在另一个类别
Category2
中添加了另一个方法,也称为
foo
。然后,我对
MYCustomClass
的一个实例调用
foo
。在我的例子中,正在调用
Category2
中的
foo
。我的问题是:这有什么解释吗?或者,这是一种“未定义”/“依赖于编译器”的行为。另外,通过指定我希望在调用中使用的类别来限定方法调用是否可以处理这种情况


编辑:我知道我正在做的事情不受支持。我只是对它周围是否有黑客感兴趣。

这是未定义的行为。从文件中:

类别不能可靠地重写在同一类的另一个类别中声明的方法

这个问题特别重要,因为许多Cocoa类都是使用categories实现的。您试图覆盖的框架定义的方法本身可能已在类别中实现,因此未定义哪个实现优先


不,您不能指定要从
Category1
中选择
foo
,或从
Category2
中选择
foo
。如果需要,应该为这些方法指定不同的名称,例如
foo1
foo2
加载类别时,其方法会插入到现有的方法表中,一旦加载完毕,就无法区分它们来自何处。要加载的最后一个类别获胜。在下一步的日子里,我们有时会故意这样做,作为一种非常笨拙的方式来修复代码中没有源代码的坏方法