iOS开发之protocol和delegate
protocol——协议
协议是用来定义对象的属性,行为和用于回调的。
协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@optional表示可选的方法,用不到能够不写。
就像UITableView,它有两个协议:UITableViewDelegate和UITableViewDataSource,UITableViewDelegate是规定行为操作的,里面的方法都是可选的方
法,UITableViewDataSource是规定数据存储结构的,有两个必选方法。因此你再实现UITableViewDataSource时必需要定义这两个方法,否则程序会出错。
假设你使用了响应的类或者控件,假设该类定义了协议,就能够依据须要实现该协议。
protocol和java里interface的概念类似,是Objective-C语法的一部分。
定义protocol例如以下
@protocol ClassADelegate - (void)methodA;
- (void)methodB; @end那么就是定义了一组函数,这组函数放在一起叫作一个protocol,也就是协议。
函数是须要被实现的,所以假设对于class例如以下
@interface ClassB <ClassADelegate> {
}
@end就叫作ClassB conform to protocol ClassADelegate,也就是说ClassB实现了这个协议,
也就是实现了这一组函数。有了上面这个头文件,我们就能够放心作调用
ClassB *b = [[ClassB alloc] init];
[b methodA];
[b methodB];而不用操心出现unrecognized selector sent to instance这样的错误了。
所以protocol就是一组函数定义,是从类声明中剥离出来的一组定义。
id<ClassADelegate> b = ...;
[b methodA];这样的使用方法也常见,b是一个id类型,它知道ClassADelegate这组函数的实现。
delegate——托付,代理
适用场合:类A调用类B, 当类B想回调类A的方法的时候, 要用到delegate
要理解以下的代码的话, 要知道的一个知识点是 协议(protocal) 文件:ClassA.h
#import <Foundation/Foundation.h>
#import "ClassB.h"
@interface ClassA : NSObject<SampleProtocal>
- (void)test;
@end 文件:ClassA.m
#import "ClassA.h"
@implementation ClassA -(void)test{
ClassB *classB = [[ClassB alloc] init];
classB.delegate = self;
[classB actionOfClassB];
} -(void)callback{
NSLog(@"这种方法会被类B调用");
}
@end 文件:ClassB.h
#import <Foundation/Foundation.h> @protocol SampleProtocal <NSObject>
@required
- (void)callback;
@end @interface ClassB : NSObject{
id<SampleProtocal> delegate;
}
@property (nonatomic, retain) id<SampleProtocal> delegate; - (void)actionOfClassB; @end 文件:ClassB.m
#import "ClassB.h" @implementation ClassB
@synthesize delegate;
-(void)actionOfClassB{
[delegate callback];
}
@end
iOS开发之protocol和delegate的更多相关文章
- iOS开发之UIApplication和delegate
1.概述 所有的移动操作系统都有个致命的缺点:app很容易受到打扰.比如一个来电或者锁屏会导致app进入后台甚至被终止. 还有很多其它类似的情况会导致app受到干扰,在app受到干扰时,会产生一些系统 ...
- iOS 开发之 protocol Buffer 数据交换
前言: 从 14 年公司做项目时开始接触 Google 的 protocol Buffer,用了一段时间,后来到新公司就没有机会再使用了,趁着还没完全忘记,记录下. 简介:protocolbuffer ...
- 李洪强iOS开发之Block和协议
李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任 ...
- IOS开发之ZBarReaderView的使用
IOS开发之ZBarReaderView的使用 HOMEABOUTGUESTBOOKCATEGORIESTAGSLINKSSUBSCRIBE 当开发IOS程序中需要用到二维码识别功能的时候,zbar这 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
随机推荐
- 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法
假设synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和g ...
- Scilab 的画图函数(1)
Scilab 的画图函数 plot 函数 最主要的是 plot 函数,与 matlab 中的plot 函数类似. xdata = linspace(1,10,50); ydata = sin(xdat ...
- Java一流的施工顺序
1.没有对象的构造 public class Test { public static int k = 0; public static int n = 99; public static int i ...
- poj 2762 Going from u to v or from v to u? (推断它是否是一个薄弱环节图)
意甲冠军:给定一个有向图有m单向边缘.免费推断是否两点起来(a可以b要么b可以a或最多彼此),该请求 弱联通重量. 算法: 缩点求强连通分量.然后又一次建图.推断新图是否是一条单链,即不能分叉,假设分 ...
- Lua 环境结构 --Linux
curl -R -O http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 make linux ...
- 纯洁CSS实现下拉菜单和下拉容器(纯洁CSS导航栏和导航下拉容器)
虽然网上课程似即使案件大同小异,但我还是写,记笔记,也为您提供参考 我希望你能指导批评~~ 首先,我们必须列出ul li 开始我们的导航栏菜单也能说生产: 在下面的页面,我们先建XHTML结构体: & ...
- Oracle性能分析3:TKPROF简介
tkprof它是Oracle它配备了一个命令直插式工具,其主要作用是将原始跟踪文件格文本文件的类型,例如,最简单的方法,使用下面的: tkprof ly_ora_128636.trc ly_ora_1 ...
- div显示和隐藏
它是实现比较简单.style.display控制层隐藏或显示属性. <html> <body> <script> function show(){ document ...
- Cordova WP8 平台安装部署
原文:Cordova WP8 平台安装部署 Cordova是一个开放源码移动开发框架. 它允许您使用标准的 web 技术如 HTML5. CSS3 和 JavaScript 进行跨平台开发,避免每个移 ...
- Android适配方案小结(一)
相关计量单位介绍: px:是屏幕的像素点,不同设备显示的效果一样. in:英寸(1英寸等于2.54cm) mm:毫米 pt:磅, 1/72英寸 dp:device independent pixels ...