黑马程序员技术交流社区

标题: oc分类 [打印本页]

作者: AGHM0312    时间: 2015-12-7 22:14
标题: oc分类
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方法在程序启动的时候都会执行





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2