分类 类扩展 继承 协议 委托
分类(Category)
- 不产生新类,不修改原类,但有自己的.h和.m文件
- 分类只能向原类中增加方法,或者重写原类的方法
- 声明的@property只会生成getter setter方法的声明
- 类.h中定义的方法必须实现,但分类.h中定义的方法,可以不实现
- 同名方法,分类的优先级高
类别主要有3个作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。(类.h中未声明,但存在于.m中的私有方法,通过在分类.h中声明一下,就可以在其他类中进行调用了,如不前向引用,则报警告)
(3)向对象添加非正式协议。(括号是非正式协议,尖括号是正式协议) 非正式协议的方法可以不实现。
类扩展(Extensions)
- 类扩展和协议形式类似,都只有.h文件。但类扩展属于某个类的声明,协议不属于任何类,只是一组方法的声明。
- 类扩展中声明的方法必须实现
- 可以添加实例变量
- 不产生新类,只有.h文件,一般直接写在所属类的.m文件中
- 类扩展如果独立写一个文件,则声明的变量/属性/方法都是公开的,作用和类.h基本一样
- 类扩展如果写在类.m文件中,则类扩展中声明的实例变量/属性/方法都属于类私有,不能在其他类和子类中访问。
类继承/子类(Inherit)
- 产生了新类
- 子类继承父类所有的实例变量、属性、方法(包括.m中的私有的),但是无法直接访问他们,可以理解为父类私有的变量/属性/方法只在父类.m中有效,而子类中已经超过它们的作用与,故不能访问。
- 可以继续给子类添加实例变量
- 子类可重写父类(即声明和父类同名的方法),调用重写的同名方法,优先调用子类中方法
协议(Protocol)
- 不属于哪个类,只是定义一组方法,只有.h文件,一般直接写在某个类的.h文件中。
- 声明的@property只会生成getter setter方法的声明
- 只声明方法,由代理实现方法
- 支持多继承
委托(delegate)
分类 类扩展 继承 协议 委托
原文:http://www.cnblogs.com/stevenwuzheng/p/5456738.html