第25条 总是为第三方类的分类名称加前缀

2017/9/1 posted in  第四章 协议与分类

分类机制通常用于向无源码的既有类中新增功能。这个特性极为强大,但在使用时也很容易忽视其中可能产生的问题。

我们在分类中添加方法,系统在运行期时会将分类中的方法加入类中。运行期系统会把分类中所实现的每个方法都加入类的方法列表中。如果类中本来就有此方法,而分类又实现了一次,那么分类中的方法会覆盖原来那一份实现代码。实际上可能会发生很多次榭盖,比如某个分类中的方法覆盖了“主实现”中的相关方法,而另外一个分类 中的方法又覆盖了这个分类中的方法。多次覆盖的结果以最后一个分类为准。

所以我们为了解决此问题,一般做法是:以命名空间来区别各个分类的名称与其中所定义的方法。我们这里的命名空间只是在相关名称前都加上公用的前缀。

所以我们举例来说就是这样的:

@interface NSString (ABC_HTTP)
//Encode a string with URL encoding 
-(NSString*) abc_urlEncodedStiring;

// Decode a URL ©ncodeci string
-(NSString*) abc_urlDecodedString;
@end

要点

  • 向第三方类中添加分类时,总应给其名称加上你专用的前缀。
  • 向第三方类中添加分类时,总应给其中的方法名加上你专用的前缀。