一、分类的使用注意事项:
1、分类只能增加方法,不能增加成员变量。
原因:
Category是运行时决议,因为在运行时,对象的内存布局已经确定,如果添加成员变量会破坏类的内部布局,这对编译性语言是灾难性的。
2、分类中写property,只会生成方法声明。
3、分类可以访问成员变量。
3、如果分类和类出现同名方法,优先调用分类中的方法,原类中的方法则会被忽视。
4、多个分类中有同名方法,则执行最后编译的文件方法(注意开发中千万不要这么干)。
5、方法调用的优先级(从高到低)。
5、1、分类(最后参与编译的分类优先)-->原来类-->父类。
5、2、先加载原类的+load方法,再加载分类的+load方法,若多个分类,则根据编译顺序加载。
二、Extension
1、Extension是类的一部分,和类同时产生、同时消亡。
2、Extension可以为类添加私有变量、私有方法(相对,可以通过KVC修改变量,通过Runtime调用方法)。
你必须有一个类的源码才能添加一个类的Extension,所以对于系统一些类,如NSString,就无法添加类扩展
3、Extension是编译期决议。
是类的一部分,和类同时产生、同时消亡。
和头文件的@interface和实现文件里的@implement一起形成了一个完整的类。