iOS培训笔记--分类,类扩展

分类中定义的方法最好不要跟主类中方法重名,因为这样会覆盖主类方法,导致主类方法无效
分类中定义的方法子类可以继承

分类的作用:
1.将类的实现分散到不同的文件或不同的框架中
2.创建对私有方法的前向引用(在主类.m里面实现但是.h里面没有声明的,在外部不能使用,如果在分类中进行了声明,外部就可以使用了)
3.还可通过属性访问主类中的私有成员变量
4.向对象添加非正式协议。

分类特点:
1.分类只能增加方法,不可增加成员变量
2.分类如果增加属性,则必须在分类的.m文件中手动实现该属性的get和set方法,而且这两个方法所对应的成员变量 必须在主类中显式的定义过。定义属性的作用:可以访问主类中私有的成员变量(这个老师的观点,但是感觉有点问题,按照这种方法,不应该叫做增加属性了,只是给成员变量加了一个get,set方法?)
3.分类如果覆盖主类中方法,会导致主类方法无效
4.如果对于同一个类产生多个分类,且分类中有相同的方法,则调用方法时,会执行最后参与编译的分类方法

分类与子类区别:
1.为分类添加的方法成为主类方法的一部分,可以被子类继承,而为子类添加的方法,父类不可访问
2.分类方法实现中可以访问主类中声明的任何成员变量(前提是必须在主类中显式的定义过这些成员变量),但子类无法访问父类中的私有成员变量

=================================================
类扩展(匿名分类):

跟分类的区别:
分类不可定义成员变量,但类扩展可以
分类中可以声明并实现方法,但类扩展只能声明,不能实现
分类中定义的方法可以被子类继承,但类扩展中定义的方法和成员变量子类不可拥有

类扩展的特点:
类扩展可以修改主类属性的访问权限,但只能主类有影响,在类的外部,其修改的权限无效
一般是在主类A的实现文件中,格式为:
@interface A ()
{
    成员变量的定义
}
方法的声明...
@end

你可能感兴趣的:(ios)