黑马程序员技术交流社区

标题: OC Category 分类 [打印本页]

作者: 谁想去飞    时间: 2014-12-11 22:58
标题: OC Category 分类

分类的定义

分类也是以代码的形式保存在文件中

分类文件命名 主类类名+分类类名

分类文件也分为*.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.协议的使用和多态相类似,可以用于数组、参数、返回值类型,只不过多态返回的对象,一定要有继承关系,协议类型返回的对象,一定要有遵守协议或实现协议。






作者: you7759    时间: 2014-12-11 23:09
你这。。敲好了复制过来的?
作者: 谁想去飞    时间: 2014-12-11 23:47
老师讲了一点 自己总结了一点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2