Category和Protocol笔记 by STP

来源:互联网 发布:域名购买哪个网站好 编辑:程序博客网 时间:2024/05/21 06:55

1.Category:无需创建子类就能为现有的类创建新方法的方式


格式:

#import MyClass.h@interface MyClass(MyCategory){     -(void)categoryMethod;  }@end

#import MyClass+MyCategory.h@implementation MyClass(MyCategory){    -(void)categoryMethod{        NSLog(@"这是分类方法");  }}@end</span>



作用:

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<NSObject>@required-(void)requiredMethod;  //必须实现的方法,如果不写注解,默认为required@optional-(void)optionalMethod;  //可选方法@end

//TestDelegate.h@interface TestDelegate:NSObject<XXXDelegate>  //如需采用多个protocol,可用“,”隔开@end

//TestDelegate.m@implementation TestDelegate    -(void)requiredMethod{        NSLog(@"protocol的required方法");    }@end








0 0
原创粉丝点击