对于这两个东西,经常使用。问题是没有系统的认识。结合网上东西,自己记录一下!
http://www.cnblogs.com/darkangle/archive/2011/08/17/2143119.html
http://blog.csdn.net/simpson910/article/details/7941964
类别
@interface ClassName ( CategoryName )
// method declarations
@end
注意事项
1:类别是类的扩展,只可以声明方法,不可以声明变量。并且,类别的方法优先级较高,可覆盖原类方法。
2:类别的方法中,不可以调用super方法。--类别的局限
3:category 方法不能覆盖于同一class 的其它 category 中的方法。因为不法预知他们的加载优先顺序,就可能在编译时出错。
使用类别:
1。对框架提供类的扩展(没有源码,不能修改)。
2。 不想生成一个新的子类的情况下,比如对 NSArray 的扩展。
3。 方便做项目管理,可以将一份源码在多个地方共享或者做方法版本管理、多人协作开发、用本地版本替换公共版本实现。
扩展:
1:某些情况下,我们需要声明一个@property,它对外是只读的(readonly),而对内是可读写的(readwrite),这时,可以通过Extensions实现
// .h @interface BaseClass : NSObject @property (readonly) NSString *privateString; @end // .m @interface BaseClass() @property (readwrite) NSString *privateString; @end @implementation BaseClass @synthesize privateString; //... @end
2:使编辑器可以更好的验证类的私有的方法或者变量
@interface BaseClass() - (void)doSomethingPrivate; @end @implementation BaseClass //... @end