类目、延展、协议
1、类目:(Category)的基本概念
名字:原有类名字+现有类名字
是在原有的基础之上 添加方法,在使用的时候,只需要用原有类实例化出来的对象,调用即可
如果在类目中覆盖现有类的方法,这样会引起super消息的断裂,因为类目中的方法具有更高的优先级,因此,一般不要覆盖现有类中的方法
实际开发在什么情况下使用?
1)扩展已经封装好的类 (不希望再改变原有类)
2)团队里面,分工开发一个模块的时候
类目(Category)和子类有什么共同点
子类:可以扩展父类的方法
类目:可以扩展原有类的方法
子类:可以添加实例变量、属性
类目:不可以添加实例变量、属性
扩展方法的调用方式
子类:用子类的对象调用扩展的方法
类目:依然使用原有类的对象调用
2、延展(Extension)的基本概念和方法
在xcode4.3之前,直接使用self调用方法,那时候会报错,所以得用延展
类的延展就是在类中添加私有方法,延展中声明的方法在类本身的@interface类名()和它对应的@end之间实现
类有时需要方法只有自己所见,我们可以通过延展的方式定义类的是有方法
3、协议(Protocol)
1)协议就是共同遵守的一个条约
2)协议是可以被任何类实现的方法,协议本身不是类,它是定义了一个其他类可以实现的接口
3)协议是只声明,不实现
4)没有实现的类目 又叫 非正式协议
因为一般情况下类都从NSObject继承,所以NSObject的类目中所有声明的方法,这个类可以实现也可以不实现。
非正式协议是以圆括号表示,而正式协议是以<>表示。
如果子类要创建协议时,只要在基类遵守某一协议就行。
5)在哪一个类里面导入了协议,就在哪一个类里面实现这个协议方法
//@protocol 协议名 <NSObject>
//具体内容
//@end
协议里面默认的方法是强制实现的方法:
@protocol:必须强制是吸纳,不识闲就报错
例:
@optional:选择实现的(可实现、可不实现,不会报错)
例:
6)respondsToSelector:判断是否能够响应一个方法
@selector(选择的方法):方法选择器,是用来选择方法的
例: