博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Category和Protocol笔记 by STP
阅读量:4046 次
发布时间:2019-05-25

本文共 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/

你可能感兴趣的文章
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
将数据直接上传到分区目录(hdfs)上,让Hive分区表和数据产生关联有哪些方式?
查看>>
Hive 中分区是否越多越好?
查看>>
Hive 的分桶表是什么?有什么作用?
查看>>
Hive 桶表是否可以通过直接 load 将数据导入?
查看>>
Hive 分区和分桶的区别?
查看>>
order by,sort by,distribute by,cluster by的区别是什么?
查看>>