分类的定义 分类也是以代码的形式保存在文件中 分类文件命名 主类类名+分类类名 分类文件也分为*.h文件和*.m文件 *.h文件存放分类的声明部分内容 @interface 主类类名(分类类名) //添加方法声明 @end .m文件存放分类的实现部分内容 @implementation 主类类名(分类类名) //添加方法实现 @end 分类中是不可以创建实例变量的,自然也不可以创建属性。 在分类中是可以访问主类的属性,但不可以访问主类的实例变量。 分类的实现步骤: 1.创建分类 2.调用分类中的方法 3.#import 分类
分类的使用 分类可以给一个自定义类添加功能 分类还可以给一个系统类或第三方类添加功能
二、扩展(延展) 1.概念 扩展其实就是分类的一种特殊形式,扩展是没有名字的。 2.使用方式 a.扩展中可以声明实例变量,所以可以声明属性 b.扩展通常定义在文件的.m中,不能分开。 c.扩展是用来声明私有的属性和方法 区别: 分类:是不可以声明实例变量,通常是公开的,文件名通常为:"主类类名+分类类名.h" 扩展:是可以声明实例变量,是私有的,文件名通常为:"主类类名_扩展标识.h",注意扩展没有名的。
三、协议 1.概念 协议就是规则,定义一个协议就相当于制定规则。 OC中类可以遵守协议,遵守了一个协议的类相当于拥有了一种能力。 2.语法 @protocal 协议名 @required 声明必须遵守的属性和方法 @optional 声明可选(可以)遵守的属性和方法 默认 @required @end 3.一个类遵守一个协议 a.@interface 类名(分类类名):父类名<协议名> b.实现协议中声明的方法 4.使用协议类型的引用指向实现了协议或者遵守了协议的对象 id<TRProtocol> p = [[MyClass]init]; [p …];可以向协议的引用发送消息,只能发送协议要求的消息。 5.协议的继承 协议的继承相当于协议的合并。 子协议 父协议 @protocol TRTarena2 <TRTarena> -(void)learn; @end 6.一个类可以同时遵守多个协议,协议之间使用","分隔符分开。 @interface TRStudent : NSObject<TRTarena,TRTarena3>
7.协议的使用和多态相类似,可以用于数组、参数、返回值类型,只不过多态返回的对象,一定要有继承关系,协议类型返回的对象,一定要有遵守协议或实现协议。
|