ios--->OC中Protocol理解及在代理模式中的使用
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];
}
ios--->OC中Protocol理解及在代理模式中的使用的更多相关文章
- Android开发中无处不在的设计模式——动态代理模式
继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...
- Java反射机制在代理模式中的使用
代理模式的核心思路就是一个接口有两个子类,一个子类完成核心的业务操作,另一个子类完成与核心业务有关的辅助性操作. 代理模式分为静态代理模式和动态代理模式. 静态代理模式: //接口类 interfa ...
- ios category,protocol理解
category: 向现有的类中增加方法,同时提供方法的实现,现有类不需要做任何改动. protocol:(相当于Java或C#中的接口interface,当很多类都要需要类似的方法,但是方法具体实现 ...
- oc学习之路----scrollView的代理模式
右图是OC里面scrollView的代理的描述,从这里可以开出来,任何对象都可以作为scorllView的代理对象只要实现了UIScrollViewDelegate这个协议,为什么呢,原因要追究到UI ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- JAVA静态代理模式(从现实生活角度理解代码原理)
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式说白了就是"真实对象"的代表,在访问对象时引入一定程度的间接性,因为这种间接性可以附加多种用途. 在 ...
- 轻松理解 Java 静态代理/动态代理
目录 什么是代理模式 定义 代理模式的主要角色 优点 缺点 静态代理 动态代理 JDK原生动态代理 例子 分析 小结 CGLIB动态代理 例子 分析 final类型 其他方案 尾声 理解Java动态代 ...
- JAVA动态代理模式(从现实生活角度理解代码原理)
所谓动态代理,即通过代理类:Proxy的代理,接口和实现类之间可以不直接发生联系,而可以在运行期(Runtime)实现动态关联. java动态代理主要是使用java.lang.reflect包中的两个 ...
- Java中的代理模式
代理模式在Java Web的框架中经常使用到.比如说在对数据库的访问中,核心功能是对数据库的增删改查,而连接数据库.处理事务等功能我们在开发中也要考虑到.所以我们将数据库的CRUD抽象到接口中,然后实 ...
随机推荐
- Python9_类
类的基础知识 属性:类变量.实例变量.方法:初始化方法 __init__ //初始化方法不是必须的:其他方法: //类的定义class Employee: empCount = 0 //类变量,有些 ...
- json_encode函数的JOSN_UNESCAPE_UNICODE
echo json_encode('测试'); //\u6d4b\u8bd5 echo json_encode('测试',JSON_UNESCAPED_UNICODE); // 测试 加上JSO ...
- Struts2 控件标签
Struts 2 的标签有一组标签,更容易控制流程页面执行.以下是重要的Struts2控制标签列表: if /else 标签: 这些标签执行可在每一种语言找到的一种基本条件流程. 'If'标签可用于本 ...
- Sybase commands
(1)update table statistics $table name if we change index info for a table ,such as create or drop i ...
- Google老师亲授 TensorFlow2.0实战: 入门到进阶
Google老师亲授 TensorFlow2.0 入门到进阶 课程以Tensorflow2.0框架为主体,以图像分类.房价预测.文本分类等项目为依托,讲解Tensorflow框架的使用方法,同时学习到 ...
- java中List 和 Set 的区别
a. 特性 两个接口都是继承自Collection,是常用来存放数据项的集合,主要区别如下: ① List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元 ...
- MySQL中的CHAR和VARCHAR到底支持多长?
最近在研究MySQL的数据类型,我们知道,选择合适的数据类型和数据长度对MySQL的性能影响是不可忽视的,小字段意味着可以MySQL可以读取更多的记录,从而加快查询速度. 网上该问题的答案有很多版本, ...
- Python学习3月5号【python编程 从入门到实践】---》笔记(2)
1.操作列表 一.遍历整个列表,并且想对每一个元素执行相同的操作.##这里就不得不提起我们一直用的For函数了. 二.深入地研究循环 (1)for i in superheroes:##首先读取其 ...
- 小白学 Python 爬虫(33):爬虫框架 Scrapy 入门基础(一)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 从零开始Go语言-GoLand(编译器)-Windows(平台)
本文章适合那些想入门Go语言,却又不知道如何搭建自己的第一个HelloWorld的同学. 推荐几个Go语言相关学习网站: C语言中文网: http://c.biancheng.net/golang/ ...