使用分类(category)可能发生的问题

如果两个分类实现了同样的方法,实际调用哪个是未定义的。

比如NSString的分类NSStringExtensionMethods实现了- (BOOL)isEqualToString:(NSString *)aString;。如果我们在自己的分类里面也实现了- (BOOL)isEqualToString:(NSString *)aString;方法,则实际调用哪个是不确定的。

为了避免这一现象发生,最好的解决方法是为分类内的方法名添加前缀,就好像给自定义的类添加前缀一样。

读者可以选择同自定义一样的三个字母的前缀,但字母要小写,以便遵循方法命名的惯例,然后在前缀和正式的方法名之间添加一个下划线。

@interface NSString (XYZAdditions)

- (BOOL)xyz_isEqualToString:(NSString *)aString;

@end

这样就可以保证方法在运行时能够被正确调用。命名冲突的可能性被消除了:

BOOL isEqual=[@"A string." xyz_isEqualToString:@"B string."];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容