类目(Category)
(1).为已知的类添加新的方法,无论是否知道类的源代码,这些类包括自己定义的类和系统已有的类。
(2).将类的实现分散到多个不同的文件中,将多个类目的声明放入同一个.h文件中,将实现放入多个.m方法中。
(3).使用类目创建对私有方法的前向引用,就是为类创建私有方法。
(4).向对象添加非正式协议,现在逐渐被正式协议做替代。
注意:类目里面只能写方法,不能写声明和属性,所以,类目不能作为接口来用
注意:
1、类目无法向已有类中添加实例变量。
2、如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级高,如果方法名冲突,已有类中的原始方法便无法使用。
3、在使用类目的时候,最好是将自己扩展的方法和原始方法区分开来。
NSString+LuisX.h文件中1
2
3
4
5
6
7
8
9
10
@interface NSString (LuisX) {
//不能在分类中定义成员
}
- (NSInteger)getMyStringLength; //声明实例方法
+ (NSString *)getHomeDirectory; //声明类方法
@end
NSString+LuisX.m文件中
1 |
|
类目演示
1 | //////////类目演示////////// |
延展(Extension)
(1).延展的作用就是定义自己的私有方法。
(2).在自己类的实现文件中添加类目(匿名类目)来声明私有方法。(只有本类的.m文件中才能使用)。
(3).形式和类目相同,不用新创建文件,只是把类目的interface地方的文件放在了你需要扩展的类的.m文件里边。
Father.h文件中
1 |
|
Father.m文件中
1 |
|
延展演示
1 | //////////延展演示////////// |
协议(Protocol)
(1).协议声明了可以被其他的类实现方法。协议本身并不会去实现。
(2).协议不是类,只是一个其他对象可以实现的接口。
(3).一个类可以通过协议,用来遵循多个类中的方法,这样可以做到多继承的效果
注意:
@required 必须方法 (默认)
@optional 可选方法
Girl.h文件中
1 |
|
Girl.m文件中
1 |
|
Boy.h文件中
1 |
|
Boy.m文件中
1 |
|
协议演示
1 | //////////协议演示////////// |