本文共 1090 字,大约阅读时间需要 3 分钟。
1.Category:无需创建子类就能为现有的类创建新方法的方式
格式:
#import MyClass.h@interface MyClass(MyCategory){ -(void)categoryMethod; }@end
#import MyClass+MyCategory.h@implementation MyClass(MyCategory){ -(void)categoryMethod{ NSLog(@"这是分类方法"); }}@end
作用:
1.将类的扩展分散到不同的文件中,方便管理;
2.声明其他类未实现的私有方法,避免编译器产生警告;
3.向对象添加非正式协议。
使用场景:
1.团队开发,一个类中的很多方法需由不同的组员实现;
2.扩展基础类库中的类,例如:NSString等
局限性:
1.无法添加实例变量,只能添加方法;
2.当Category中的方法与原始类中的方法同名时,Category的方法优先级更高,原始类中的方法将被覆盖,无法使用
Category和Extension(类扩展)的区别:
1.从形式上看,Extension是匿名的Category;
2.Extension可添加变量;
3.Extension声明的方法需要在main implementation中实现,Category可不实现。
2.Protocol:一系列的方法列表,类似于Java的接口
作用:
1.利用protocol实现代理模式,解耦MVC中view和controller。
使用场景:
1.UIView产生的事件通过protocol通知controller。
protocol可以在单独的h文件中,也可写在相关类的h文件中
格式:
@protocol XXXDelegate@required-(void)requiredMethod; //必须实现的方法,如果不写注解,默认为required@optional-(void)optionalMethod; //可选方法@end
//TestDelegate.h@interface TestDelegate:NSObject//如需采用多个protocol,可用“,”隔开@end
//TestDelegate.m@implementation TestDelegate -(void)requiredMethod{ NSLog(@"protocol的required方法"); }@end
转载地址:http://rczci.baihongyu.com/