category分类的用法:
把一个类分成多个部分。
作用:
不改变原有的类,去给原有的类添加功能(方法)
写法:
命名:原有的类名+分类名
声明:
声名:
@interface Person (分类名)
//你要添加的功能....
...
@end
实现
@implementation Person (分类名)
//实现你要添加的功能....
@end
好处:
1.可以把一个类分模块,便于协同开发,并优化类的结构.
2.不改变类名,给类添加功能.
注意的问题:
1.分类不能写(添加)属性.只能(添加)写方法.
2.分类中的方法不能与主类或其它分类重复.即不能重写.如果重写了,那么会覆盖原来的方法.
3.分类中可以直接用主类的属性,但是属性的权限要>=@protected
4.不同分类中重写了同一个方法.那么哪个分类最后编译,则哪个分类的方法执行.
5.主类永远在分类之前编译
编译顺序: 父类-->主类-->分类(多个分类是可以调整顺序的)
分类的另一个用法:
去给OC提供的类进行分类.添加额外的功能.如:NSString
事例:
计算一个字符串字母a出现的次数. addgaaa -->4次
方法详见:NSString+getACount.m
注意:
1,主类必须先存在,没有主类,就没有分类
2,要去使用分类中的方法,必须导入分类的头文件
3,分类中只能定义方法,不能定义属性,且方法最好不重写,否则会覆盖主类或其它分类同名方法
4,主类永远在分类之前编译
类的本质:
本质上还是一个对象,叫类对象,这个对象的类型: Class
类对象,程序启动的时候加载,与对象创建无关,调用-(void) load方法
对象是在创建对象的时候加载
对象是在他被创建的时候加载,且必须在类对象加载以后才会加载
对象加载会执行initialize方法,只会在(类型)对象第一次创建的时候执行
同一类的类型对象创建对象只会执行一次,不同类的类型对象执行n次
init
是在对象被创建的时候执行的,每一次创建都会执行
一个类的对象被创建,则其父类的对象也会被创建(直接或间接父类)
特例:
分类的load方法不会覆盖主类,
主类与分类的load方法在程序启动的时候都会执行
|
|