iOS-Category、Extension

一、分类的使用注意事项:

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一起形成了一个完整的类。

你可能感兴趣的:(iOS-Category、Extension)