Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何避免不同类别的扩展定义相同的方法_Objective C_Cocoa_Polymorphism_Categories - Fatal编程技术网

Objective c 如何避免不同类别的扩展定义相同的方法

Objective c 如何避免不同类别的扩展定义相同的方法,objective-c,cocoa,polymorphism,categories,Objective C,Cocoa,Polymorphism,Categories,Objective-c类可按类别扩展。 但是,如果通过过度定义同一方法对同一类进行多类别扩展,则不会定义结果,如下例所示: @implementation someClass (category1) - (void)foo {} @end @implementation someClass (category2) - (void)foo {} @end 在这种情况下,编译器甚至不会显示任何警告消息。在一些大型项目中,由于维修人员不同,这种情况很难解决 所以我的问题是:有什么复杂的模式

Objective-c类可按类别扩展。
但是,如果通过过度定义同一方法对同一类进行多类别扩展,则不会定义结果,如下例所示:

@implementation someClass (category1)

- (void)foo {}

@end

@implementation someClass (category2)

- (void)foo {}

@end
在这种情况下,编译器甚至不会显示任何警告消息。在一些大型项目中,由于维修人员不同,这种情况很难解决


所以我的问题是:有什么复杂的模式或解决方案可以避免这种情况吗?

对于大型项目,一个好的做法是在方法名称中添加前缀,如:

- (void)nd_foo;
- (void)sp_foo;

我建议使用大写前缀,就像类名一样。选择器区分大小写,因此有助于区分名称空间前缀和仅为单词的前缀。e、 g.用“ATPosition”代替“ATPosition”。下划线也有类似的用途,尽管一些代码基经常在方法名中使用下划线,因此可能会有歧义。这是有道理的,但对于我所看到的实现,开发人员通常使用小字符作为方法前缀。非常感谢!这似乎是我迄今为止听到的最好的方式。