如何对一个类进行扩展呢?
objective-c提供了3种方式:
Category(类目) , Extension(延展) , Protocol(协议)
1.类目
允许为一个已存在的类添加一些方法而不用子类化该类,也不需了解其细节.可以给一个内建的对象添加方法
(1)类目的文件名
如果类目所在文件只有类目一个类,可对这个类取名为类名+类别名,如NSString+Second,这样也能更清楚的标识该文件的内容.
(2)类目的声明:
- (void)sayHi:(NSString *)hi;
@end
(3)类目的实现
@implementation NSString (Second)
- (void)sayHi:(NSString *)hi
{
NSLog(@"self = %@",self);
NSLog(@"hi = %@", hi);
}
@end
(4)类目的作用
1.将类的实现分散到多个不同的文件中
多个类目声明放在同一个.h文件中,将实现放入多个.m文件中
2.使用类目创建对私有方法的前向引用
为类创建私有方法
3.像对象添加非正式协议
(4)类目的局限性
1.无法向类目中添加新的实例变量,类别没有位置容纳实例变量.
2.名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级.类别方法将完全取代初始方法从而无法再使用初始方法.无法添加实例变量的局限可以使用字典对象解决.
2.延展
(1)概述
有些方法我们不希望被外部类调用甚至知道,所以我们就会用到延展这个特性
(2)延展的使用
例如:
Person类 .h文件
@interface Person :NSObject
- (void)showTouchView;
@end
Person类 .m文件
@interface Person ()
- (void)showTouchView;
@end
如果我们希望showTouchView这个方法只能被Person类调用,其他的外部类都不能调用,我们需要把该方法写到Person类对应的.m文件中.类名后要加括号.
3.协议
(1)概述
协议,是通过网络,计算机使用者进行通讯后,互相进行约定规定的集合. 两个类进行通讯,用协议比较方便
分为@interface定义的非正式协议和@protocol定义的正式协议.