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