关于Category的看法

标签( ios Category)


一、category重写系统类的方法

在做xcode7中状态栏显示为白色的时候,以前的在plist文件中设置不好用了,于是查了一个办法,写个UINavigationController的扩展

#import "UINavigationController+Status.h"

@implementation UINavigationController (Status)

-(UIStatusBarStyle)preferredStatusBarStyle

{

    return UIStatusBarStyleDefault;

}

@end

但是遇到了一个问题,没有导入头文件就能起作用,在查完api文档之后,发现在预编译时已经编译,系统会自动调用。于是自己写了一个NSString的扩展,但发现并没有调用。原因是程序启动的时候必定调用UINavigationController,所以有效果,而NSString这个必须显式的调用。

之后发现的问题

  • CocoaFramework有很多是用Category实现的,重写之后,会导致在Runtime的时候,只有一个方法会被执行,而哪个会被执行是undefined。

例如,重写NSString的一个方法base64EncodedString,而其他CocoaFramework的也有可能使用Category来实现这个方法,这样就会导致在Runtime的时候,执行哪个方法是Undefined。

  • 另外,有个地方要注意,那就是Category方法的命名。 通常的明明方式是加一个前缀。因为这也可能和系统重名。

因为,现在名字并未发生冲突,IOS版本在更新,SDK也在更新,也就是说要尽量保证将来方法的名称也不发生冲突。

总结:

  1. 需要重写方法的时候,尽量使用继承。不要使用category
  2. category的名字尽量加前缀,防止和系统冲突
  3. 不忘初心,记住category最初的作用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,808评论 0 9
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,709评论 33 466
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,312评论 30 472
  • 不要为自己找太多借口,梦想的破碎,生活的不顺,大都不是时间和别人的问题!而是曾经的你,敢不敢去放手一搏的问题!
    不羡仙2阅读 1,183评论 0 0
  • 每段话的开始,就像每一年的启程.没想好前往何处,却终究会开始。 已经很久没了这种情绪,像是忙碌了很久,却不知道自己...
    想好了再说阅读 1,404评论 0 1