1分类(类目,category),目的 是为没有源代码的类添加方法(只能添加方法,不能添加实例变量)
是扩充一个类的功能的方式之一,为原有类扩充的方法会成为原类的一部分,使用即可
分类也分为.h(接口部分),以及.m(实现部分)
.h文件中填写方法的声明,.m文件中填写方法的实现
分类的定义格式,@interface开头 + 扩展类的类名(分类名) @end结束
例子:
.h文件
@interface NSString (Compare)
-(void)sayHi;
//两个字符串对象比较
-(NSComparisonResult)compareAgainst:(NSString *)anString;
@end
2.延展:
延展也是扩充类的一种方式,只不过延展扩充的内容是私有的,是在.m文件中定义的,
延展既可以扩展方法,也可以扩展实例变量,只不过是私有的,外界无法直接访问
延展是为有源代码的类扩充内容(因为没有源代码是拿不到.m文件的)
@interface Person ()
{
NSString *_aa;
NSString *_bb;//延展中添加私有实例变量
}
-(void)sayMorning;
-(void)sayAfternoon;
-(void)sayEvening;
@end
3.协议
1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现
@protocol TeachingProtocol <NSObject>
@optional//选择,可选的,被他修饰的方法服从协议的类可以选择实现(可以实现也可以不实现)
-(void)TeachKVC;
@required(默认) //必须做的,服从协议的类必须实现该方法
-(void)teachMemory;
@end
@protocol WomanDelegate <NSObject>//marryProtocol <NSObject>
-(void)writeCode;//敲代码
-(void)cooking;//做饭
-(void)washClothes;//洗衣服
-(void)sweep;//扫地
协议就相当于一个任务清单,规定所要做的操作(只有一系列方法的声明),谁服从协议谁就要实现协议中的方法(完成任务清单中的任务)所以协议只有.h文件,没有.m文件(协议与文件没有关系,一个文件中可以有多个协议)
@interface 类名:父类名 <协议名称1,协议名称2>
@property (nonatomic, assign) id <WomanDelegate> delegate;//(代理的名字) //
-(void)clothesDirty
{
//让丈夫洗衣服
[self.delegatewashClothes];
}
让代理去执行方法washClothes
比如创建一个man类遵守womam的协议,在main函数中创建一个man对象赋给womam的属性delegate(先这么理解)