objective-C程序设计学习笔记3--分类和协议

来源:互联网 发布:淘宝订单清洗过期 编辑:程序博客网 时间:2024/04/26 00:48

分类可以在不继承和改动原类的情况下为类提供扩展

格式如下:

声明部分

@interface 原类 (分类名)

扩展的方法

@end

实现部分

@implementation 原类 (分类名)

扩展的方法

@end

注意:分类中不能直接访问原类中@property定义的变量(因为其为原类私有的),不过可以通过[self 变量名]访问。


协议相当于C++中的抽象类(接口类),类如果声明遵循某协议则必须实现协议的方法

//定义Drawing协议

@protocol Drawing //协议开始

-(void)paint; //必须实现的方法

@optional

-(void)outline; //@optional后边的方法为可选实现的方法

@end //协议结束


//RectAngular类声明实现Drawing协议

@interface RectAngular : 父类 <Drawing>


//检查对象是否遵循某协议

[obj conformsToProtocal: @protocal (Drawing)] == YES


//告诉编译器obj对象将会是遵循Drawing协议的对象,如果赋值给obj的对象不遵循Drawing协议则会发出警告

id <Drawing> obj


//扩展Drawing协议

@protocal Drawing3D <Drawing>


//分类也可以遵循协议

@interface 类名 : 父类 <协议名>


代理

如果某类实现了协议的方法,某类则代理了协议的行为


0 0
原创粉丝点击