objective-C程序设计学习笔记3--分类和协议
2016-07-02 17:17
507 查看
分类可以在不继承和改动原类的情况下为类提供扩展
格式如下:
声明部分
@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 类名 : 父类 <协议名>
代理
如果某类实现了协议的方法,某类则代理了协议的行为
格式如下:
声明部分
@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 类名 : 父类 <协议名>
代理
如果某类实现了协议的方法,某类则代理了协议的行为
相关文章推荐
- OpenGL Frame BufferObject(FBO)
- Can't get WebApplicationContext object from ContextRegistry.GetContext(): Resource handler for the 'web' protocol is not defined
- YYModel 源码解读(二)之NSObject+YYModel.h (5)
- Intellij IDEA 编译提示: "Test is already defined as object Test"
- POST请求报错:Error Domain=NSCocoaErrorDomain Code=3840 "No string key for value in object around charact
- java中Object转String
- objc runtime 动态增加属性
- 关于EnumerateObjectsUsingBlock和for-in之间的较量
- Objective-C编程之——发送消息Send Message
- java的API/Object
- 欢迎使用CSDN-markdown编辑器
- 创建一个Object()对象
- 创建一个Object()对象
- 创建一个Object()对象
- 创建一个Object()对象
- 创建一个Object()对象
- 创建一个Object()对象
- 创建一个Object()对象
- 创建一个Object()对象
- 创建一个Object()对象