分类可以在不继承和改动原类的情况下为类提供扩展
格式如下:
声明部分
@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 类名 : 父类 <协议名>
代理
如果某类实现了协议的方法,某类则代理了协议的行为