分类只能增加方法, 不能增加成员变量、@property(可能编译不报错,但是运行有问题)
分类可以访问原来类中的成员变量
如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略
方法调用的优先级(从高到低):
➢ 分类(最后参与编译的分类优先),只要有分类就优先调用分类,不考虑与主类的编译顺序。
➢ 原来类
➢ 父类
类扩展是分类的一个特例。
Extension是Category的一个特例。
起名字为匿名,并且添加的方法一定要实现。(category可以不实现)。因此又叫匿名分类。可以为一个类添加额外的变量,方法或者合成属性。
我的理解:
延展就是为类一开始设计没有考虑到的情况增加新的属性方法来弥补。
有以下方法实现类扩展:
1. 直接在Person.m文件中用 @interface Person()的方法,然后在类本身的@implementation中去实现扩展的方法;
2. 新建Objective-C文件work,选择Extension,扩展的原类为Person,然后生成Person_work.h头文件,在头文件中扩展属性和方法,同样需要在原类的.m文件中区实现。
看了网上一些关于Category和Extension之间区别的文章,还是觉得这片比较细致一些。原po地址:http://blog.csdn.net/lushuner/article/details/48371623。我只是个搬运工。