iOS开发总结iOS Developer

Category 与 Extension

2017-07-05  本文已影响57人  Randall_Steven

Category(分类)

我们为什么要用Category

当我们需要为已知的类添加方法的时候,我们就可以考虑使用Category。有人就会问,为什么我们不直接在这个类中添加方法,或者继承这个类在子类中添加方法?
首先,不直接在这个类中添加方法的原因,一种情况是我们可能没有办法直接修改这个类的文件,例如给NSArray添加一个方法,我们只能写一个Category。还有就是如果我们修改了这个类的方法,那么他的子类也都会受到影响,所以这并不是一个好的做法

再说继承,我们加了这个方法之后,这个类从设计上讲还是这个类,而不是他的子类,所以继承并不是很合理

如何写一个Category

@interface NSObject (Category)

- (void)myMethod;

@end

@implement NSObject (Category)

- (void)myMethod {
    /*方法实现*/
}

@end

需要留意的地方

Extension

看起来像是一个匿名的Category,但是二者还是有很多区别的。Extension通常写在.m文件中,当我们新建一个view controller子类的时候,我们可以在.m文件中看到系统会为我们自动生产一个Extension,而我们在新建一个NSObject的子类的时候,系统就不会自动为我们创建这个Extension

Extension是声明类中私有方法的好方法

如何写一个Extension

@interface NSObject ()

- (void)myMethod;

@end

二者区别

Demo

具体上面的内容我写了个小Demo,大家可以下载下来看看,有些代码注释掉了(主要是我不想在项目中有warning),可以把注释去了,看看这些情况,实际执行的哪个方法,对理解有很大帮助。

Demo

还有就是很推荐大家看看下面美团点评团队的这个博客,很深入的讲解了Category,很涨知识

参考资料

http://tech.meituan.com/DiveIntoCategory.html (强烈推荐)

上一篇下一篇

猜你喜欢

热点阅读