Protocol(协议)、Delegate(委托)、DataSource(数据源)

这里以 UITableViewController 和 UITableView 的关系为例:

//------------------------------------------------------------------------
// UITableViewController.h
@interface UITableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property(nonatomic,retain) UITableView *tableView;
@end

//------------------------------------------------------------------------
// UITableView.h
@protocol UITableViewDataSource;

@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>
@optional
// Delegate方法都是可选的
@end

@interface UITableView : UIScrollView <NSCoding>
@property (nonatomic, assign)   id <UITableViewDataSource> dataSource;
@property (nonatomic, assign)   id <UITableViewDelegate>   delegate;
@end

@protocol UITableViewDataSource<NSObject>
@required
// 必须实现的DataSource方法
@optional
// 可选的DataSource方法
@end

1、UITableViewController 实现了 UITableViewDelegate 和 UITableViewDataSource 两个协议

2、这两个协议是在 UITableView 中定义的

  注意:定义时可以加上<NSObject>,表示同时也实现父协议中的方法

3、协议定义好后,就可以声明两个属性来放置其委托对象:dataSource 和 delegate

  注意:如果协议的定义放在属性声明的后面,那么在前面要提前先声明下协议,如 @protocol UITableViewDataSource;

  上面代码的顺序是完全按照库文件中来的,不知为何 delegate 定义在前,dataSource 定义在后,maybe是展示下两种形式吧(我瞎猜的~)

  注意:这两个属性是assign的,换句话说,是weak非strong,原因是 UITableViewController 有个属性 UITableView(前者拥有后者),而 UITableView 的委托和数据源又指向 UITableViewController,如果设为stong,则会互为拥有,引入 retain cycle(保留环)

4、实现委托对象的方法是声明某个类遵从委托协议,然后把协议中想实现的方法在类里实现

时间: 2024-10-02 23:23:19

Protocol(协议)、Delegate(委托)、DataSource(数据源)的相关文章

第七讲.NSDate,category(分类),extension(延展),protocol(协议),delegate(代理)

一.掌握NSDate和NSDateFormatter的使用 NSDate是Cocoa中?用于处理日期和时间的基础类,封装了某一给定的时刻(含日期,时间,时区). 了解NSDate的创建,如何计算当前时间,时间间隔,以及时间日期与字符之间的互转. 1>.NSDate创建,当地时间计算,时间按间隔计算,时间与字符之间的互转 练习题1:计算当前时间与一个固定时间按的时间差 练习二:字符串转化为日期对象 二.掌握Category的定义和使用(只能为类扩展类方法或实例方法) 1.主要作用是为:没有源代码的

普通选择器&lt;数据源协议,委托协议&gt;(IOS开发)

-普通选择器必须满足这两个协议,一个为委托协议,一个为数据源协议 -委托协议负责控制控件UI.事件响应, 实现可选 -数据源协议负责控件与应用数据模型的桥梁,一般必须实现 @interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> // // ViewController.h // PickViewSample // // Created by 李亚坤 on 14-10-

第23条:通过委托与数据源协议进行对象间通信

Objective-C语言特性:协议(protocol),它与Java的“接口”(interface)类似. Objective-C不支持多继承,但可以把类的实现方法定义在协议里面. 协议最为常见的用途是实现委托模式(Delegate pattern). 委托模式(Delegate pattern): 用来实现对象间的通信, 该模式的主旨是:定义一套接口,某对象若想授受另一个对象的委托,则需遵从此接口,以便成为其“委托对象”(delegate).而这“另一对象”则可以给其委托对象回传一些消息,也

iOS开发-Protocol协议及委托代理(Delegate)传值

前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但具体怎么做,它不关心. 当 一个类要使用某一个Protocol(协议)时,都必须要遵守协议.比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来提醒你没有遵守×× 协议.注意,我这里说的是警告,而不是错误.对的,就算你不实现那些“必要实现”的方法,程序也是能运行的,只不过多了些警告. 我会

常见的选择&amp;lt;数据源协议,委托协议&amp;gt;(IOS发展)

-常见的选择必须满足这两个协议,约定实施.一个为数据源协议 -托付协议负责控制控件UI.事件响应, 实现可选 -数据源协议负责控件与应用数据模型的桥梁,一般必须实现 @interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> // // ViewController.h // PickViewSample // // Created by 李亚坤 on 14-10-21.

Protocol协议及委托代理(Delegate)传值

前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但具体怎么做,它不关心. 当一个类要使用某一个Protocol(协议)时,都必须要遵守协议.比如有些必要实现的方法,你没有去实现,那么编译器就会报警告,来提醒你没有遵守××协议.注意,我这里说的是警告,而不是错误.对的,就算你不实现那些“必要实现”的方法,程序也是能运行的,只不过多了些警告. 我会在本

ios协议和委托

在iPhone开发协议和委托是常接触到的东西,到底什么是协议什么是委托,他们什么关系? 一 协议 (1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进行实现,让用它的类来实现这些方法 (2)在任何一个类中,只有声明了协议,都可以实现协议里的方法. (3)协议不是一个类,更没有父类了. (3)协议里面的方法经常都是一些委托方法, 二 委托 委托,故名思议就是托别人办事.打个比方: 张三迫切需要一分工作,但是不知道去哪找.于是他就拜托(委托)李四给帮

ios中的代理与协议(delegate)

源码地址 :http://download.csdn.net/download/swanzhu/9016861 一.理解协议与代理 协议 协议的格式:@protocol关键字:协议的声明 例如 @protocol CustomAlertViewDelegate <NSObject> <methods>协议的方法 @optional //此关键字下声明的方法,是可选实现的方法. @required //此关键字声明的方法为,必须实现的方法,如果不实现,编译会报警告,程序运行崩溃. /

swift详解之十一------------协议、委托(代理)模式

协议.委托(代理)模式 注:本小节总结协议以及依靠协议实现委托,这将在以后经常被使用.是一个非常重要的模块 看下官方的定义:协议定义了一个蓝图 , 规定了用来实现某一特定工作或者功能所必须的方法和属性,类.结构体.或者枚举类型都可以遵循协议, 并提供具体实现来完成协议定义的方法和功能 . 任意能够满足协议要求的类型都被成为遵循了这个协议 1.协议的语法 协议的关键字:protocol 协议的语法: protocol Pro1{ //这里定义属性或者方法 } 要使一个类或者结构体遵循某个协议 ,

OC中类别、扩展、协议与委托

类别(category)--通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法. 类别,接口部分的定义,通常该文件命名为已有"类+类别名.h" @interface 已有类 (类别名) //.......方法实现 @end 例如,考虑为NSNumber增加一个类别,则接口部分代码如下 <p style="margin-top: 0px; margin-bottom: 0px; font-family: