扩展一个类有几种方法呢?
1.修改源代码
2.编写子类
3.Category(类目)
4.Extension(延展)
5.Protocol(协议)
详解:Category
1.作用:为已知的类添加方法
2.使用场景:要扩展的类是系统类,或者第三方非开源类
类目的定义和类的定义相似
1.声明 @interface NSString (SayHi)
2.实现 @implementation NSString (SayHi)
3. 文件名 NSString+SayHi.h NSString+SayHi.m
使用类目的好处:扩展别人的类,作为子类的替代方式.把一个类的代码放到多个文件中,便于多人协作.
注意:不能在类目中添加实例变量,可以为同一个类添加多个类目,但类目名和类目中的方法不要重复.
不要随意重写原始类中的方法,类目中的方法会成为原始类的一部分,级别相同,会被子类继承.
详解: 延展
延展是特殊形式的类目,在类的.m文件中申明以及实现
作用:为类定义私有方法.注意:在ios中,没有绝对的私有方法,不写类目名时,表示延展中定义的方法必须实现.
如果提供了类目名称,则可以选择性实现.
总结:如果我们有类的源代码,我们既可以为类添加实例变量,也可以为类添加方法,如果没有源代码,只能定义子类为类添加方法或实例变量.
但是如果使用category或者protocol只能为类添加方法,不能添加实例变量,extension可以添加实例变量,但是添加的实例变量为私有,不能被继承.