这里以 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、实现委托对象的方法是声明某个类遵从委托协议,然后把协议中想实现的方法在类里实现

最新文章

  1. Taylor定理证明
  2. WebGL框架 -- three.js
  3. 使用ODP.NET一次执行多句SQL语句
  4. CentOS6.5菜鸟之旅:安装ATI显卡驱动
  5. 10SpringMvc_springmvc快速入门小案例(注解版本)
  6. 【现代程序设计】homework-05
  7. TCP及IP报头及协议
  8. selenium如何做兼容性测试呢
  9. java dos下中文乱码
  10. CC++初学者编程教程(13) 基于Oracle linux 的Oracle12c环境搭建
  11. Java学习(一)
  12. TCP/IP(六)应用层(DNS和HTTP协议)
  13. CSAPP-程序优化
  14. Python进阶3---python类型注解、functools
  15. python3+selenium入门15-执行JavaScript
  16. 为 github markdown 文件生成目录(toc)
  17. vim学习、各类插件配置与安装【转】
  18. TTPRequest 提示#import &lt;libxml/HTMLparser.h&gt;找不到 的解决方法
  19. java反射field和method的顺序问题
  20. 只需 5 秒钟,你就能取到 WPF 程序的超高分辨率超高清截图

热门文章

  1. CentOS Linux 7 提示 lsof: 未找到命令
  2. struts2学习笔记 day01
  3. 选择器 nth-child和 nth-of-type的区别
  4. Day2课后作业:购物车简单版
  5. CentOS7下使用Docker容器化.net Core 2.2
  6. Rabbitmq~linux环境的部署
  7. php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
  8. [github][https模式下提交记住密码]
  9. WORDPRESS下载按钮调整
  10. MD5加密的方法