杨小麦OC之旅--Category添加属性


5th,Dec,2015
update on 5th,April,2016; 9th,May,2016
Category:无需继承  动态 为已有的类添加方法。

注意事项:
1) Category的头文件中的方法不一定非要在@implementation中实现,也可在其他位置实现,但如果调用时依据继承树找不到该方法的实现会导致程序崩溃;
2) 理论上且苹果也不建议给Category添加变量;

优缺点

优点:
1.类中方法很多的情况下可依据方法功能相关性等拆分在多个文件中实现,有益于代码组织与团队多成员协同开发;
2.类以库的形式存在 无源代码的情况下修复Bug;
缺点:
1.不能声明属性,但可使用@dynamic变相实现;
2. 类别中的方法优先级最高,覆盖父类的方法,可能会导致super中的消息断裂。=> 因而,最好不要覆盖

分类文件名一般是“原有类名+分类名称”

类的声明

 
#import "SystemClass.h"

@interface SystemClass (CategoryName)
// method declarations
@end

Category添加属性

通过runtime.h中objc_getAssociatedObject / objc_setAssociatedObject来访问和生成关联对象 来模拟生成属性。



参考资料

    Category-iOS Developer Library

       iOS设计模式——Category

  让Category支持添加属性与成员变量

       iOS类别(Category)与扩展(Extension)

        Category中property的命运






你可能感兴趣的:(杨小麦OC之旅--Category添加属性)