OC中Protocol理解及在代理模式中的使用

Protocol基本概念
  • Protocol翻译过来, 叫做”协议”,其作用就是用来声明一些方法;
Protocol(协议)的作用
  • 定义一套公用的接口(Public)

    • @required:必须实现的方法,默认在@protocol里的方法都要求实现。
    • @optional:可选实现的方法(可以全部都不实现)
  • 委托代理(Delegate)传值

    • 它本身是一个设计模式,它的意思是委托别人去做某事。
    • 比如:两个类之间的传值,类A调用类B的方法,类B在执行过程中遇到问题通知类A,这时候我们需要用到代理(Delegate)。又比如:控制器(Controller)与控制器(Controller)之间的传值,从C1跳转到C2,再从C2返回到C1时需要通知C1更新UI或者是做其它的事情,这时候我们就用到了代理(Delegate)传值;
protocol和继承区别
  • 继承之后默认就有实现, 而protocol只有声明没有实现
  • 相同类型的类可以使用继承, 但是不同类型的类只能使用protocol
  • protocol可以用于存储方法的声明, 可以将多个类中共同的方法抽取出来, 以后让这些类遵守协议即可
运用实例
//1.定义协议类
#import <UIKit/UIKit.h>
@class XMGCartItem,XMGCartCellTableViewCell; @protocol XMGCartCellTableViewDelegate <NSObject> // 定义协议
-(void)winecelladdfun:(XMGCartCellTableViewCell *)cell; //协议方法
-(void)winecellreduesfun:(XMGCartCellTableViewCell *)cell;//协议方法 @end @interface XMGCartCellTableViewCell : UITableViewCell
@property(nonatomic,strong)XMGCartItem *winecell;
@property(nonatomic,weak)id<XMGCartCellTableViewDelegate>delegate; //协议属性
@end //2.协议类中何时调用协议方法
#import "XMGCartCellTableViewCell.h"
#import "XMGCartItem.h"
@interface XMGCartCellTableViewCell () @end @implementation XMGCartCellTableViewCell - (void)awakeFromNib {
[super awakeFromNib]; } - (IBAction)reducebtn:(UIButton *)sender {
//开始调用协议方法
if([self.delegate respondsToSelector:@selector(respondsToSelector:)]){
[self.delegate winecellreduesfun:self];
}
}
@end //3.某类遵守协议并实现协议
@interface XMGCartViewController () <XMGCartCellTableViewDelegate>
@end
//协议实现
#pragma XMGCartCellTableViewDelegate
-(void)winecelladdfun:(XMGCartCellTableViewCell *)cell
{
int totalmoney=self.totalmoney.text.intValue + cell.winecell.money.intValue;
self.totalmoney.text=[NSString stringWithFormat:@"%d",totalmoney];
}

最新文章

  1. jquery ajax解析
  2. tp框架之AJAX
  3. C# interface abstract class
  4. consul模板的说明2
  5. C语言的源程序字符集与执行字符集
  6. set+几何 LA 5908 Tracking RFIDs
  7. linq数据使用
  8. 转: 学习开源项目的若干建议(infoq)
  9. 用Module元素实现SharePoint Webpart Page的自动生成
  10. HashMap的工作原理(转)
  11. HDU1203_I NEED A OFFER!【01背包】
  12. 使用 LVS 实现负载均衡原理及安装配置详解
  13. Cocos2D iOS之旅:如何写一个敲地鼠游戏(四):创建TexturePacker自动脚本
  14. UITabbar的一些常规用法(总结)
  15. SQLServer修改登陆账户信息
  16. RNP项目遇到的坑
  17. postgresql 按日期范围查询
  18. python使用上下文对代码片段进行计时,非装饰器
  19. awk的用法
  20. com.android.dx.command.Main with arguments

热门文章

  1. Python3 安装pylint 及与PyCharm关联
  2. Python3 collections模块的使用
  3. HashMap面试题解答
  4. MyBatis学习与使用(一)
  5. [NLP自然语言处理]谷歌BERT模型深度解析
  6. 洛谷$P2050\ [NOI2012]$美食节 网络流
  7. Python数据分析:手把手教你用Pandas生成可视化图表
  8. Python3 pip换源
  9. C++中重载、重写(覆盖)和隐藏的区别
  10. Go数组和切片你不知道的区别