自己翻译 delegation 官方文档
什么是代理,知道怎么用,见过N次。会用代理传值,还不够。代理到底是用来干嘛的嘛?还是看看官方文档吧,自己翻译出来看看是不是通顺
代理:
代理是一个简单高效的模式,尤其是一个类在编程的过程中代表或者需要和另一个类协调的时候。委托对象(委托方)会持有代理对象(代理方)的一个引用,并在合适的时机给代理方发送一个消息。这个消息通知代理方,委托方将要处理一个件事或者刚处理完一件事。代理方可能会对这个消息做出相应,如更新自己或者其他类的界面或状态,并且在一些情况下,代理方可以返回一个值,来影响一个即将被处理的事件。代理最主要的价值在于它使得你能够轻松的在一个中心类里自定义多个类的行为事件。
代理和cocoa框架
委托对象通常是一个框架对象,代理对象通常是一个自定义控制器对象。在一个托管的内存环境下,委托对象会持有一个它自己代理对象的弱引用;在有垃圾收集的环境下,接受者[1]会对他的代理持有一个强引用。代理的例子在Foundation框架,UIKit,AppKit,和其他的cocoa,cocoa Touch框架里随处可见。
举一个委托方的例子:在AppKit框架里,有一个NSWindow类的实例,NSWindow 在他的方法windowShouldClose:中声明了一个协议,当用户点击关闭窗口的按钮时,这个窗口对象就会发送windowShouldClose:方法给他的代理对象,来询问它是否要确认关闭窗口。代理会返回一个布尔值,这样就能控制窗口对象的行为了。
代理和通知
代理方在多数cocoa 框架的类中,会自动注册为委托方所发送通知的观察者。代理方只需要实现一个由框架类声明的通知方法,来接受这个特别的通知消息。如上面列出的例子,一个窗口类发出一个NSWindowWillCloseNotification 消息给观察者们,但是是发出一个WindowShouldClose:消息给它的代理。
数据源
一个数据源几乎和一个代理一样。不同之处就在于和委托方的关系。与用户接口的控制器被代理 不同,一个数据源被数据控制器代理。委托对象通常是视图对象,如一个tableView (表视图),它通常对他的数据源持有一个引用,并且经常向数据源请求将要展示的数据。一个数据源和打理一样,必须采用一个协议并且至少要实现一个该代理必须要实现的方法。数据源负责管理模型对象,这样模型对象会被传送到委托视图上。
原文地址:
自己翻译 delegation 官方文档的更多相关文章
- 为开源社区尽一份力,翻译RocketMQ官方文档
正如在上一篇文章中写道:"据我所知,现在RocketMQ还没有中文文档.我打算自己试着在github上开一个项目,自行翻译."我这几天抽空翻译了文档的前3个小节,发现翻译真的不是一 ...
- [翻译]PyMongo官方文档
PyMongo官方文档翻译 周煦辰 2016-06-30 这是本人翻译的PyMongo官方文档.现在网上分(抄)享(袭)的PyMongo博客文章很多,一方面这些文章本就是抄袭的,谈不上什么格式美观,另 ...
- Apache Flume入门指南[翻译自官方文档]
声明: 根据官方文档选择性的翻译了下,不对请指正 https://flume.apache.org/FlumeUserGuide.html
- [翻译]Android官方文档 - 通知(Notifications)
翻译的好辛苦,有些地方也不太理解什么意思,如果有误,还请大神指正. 官方文档地址:http://developer.android.com/guide/topics/ui/notifiers/noti ...
- 我为什么要翻译ES6官方文档
ES6出来很久了,现在网上也有很多教程,其中以阮一峰老师的教程最为经典.大家通过学习阮老师的教程肯定能学懂ES6最新的技术. ES6官方文档是一个规范,各浏览器在实现ES6的具体API时都会遵循它.我 ...
- Android Support Library 23.2介绍(翻译自官方文档)
Android Support Library 23.2 (译者注:本文标注了部分文字链接,但须要***,要查看全部链接.请查看sukey=014c68f407f2d3e181b6b5e665f26a ...
- 【Android开发】Android Host详解(翻译自官方文档)
原文:http://android.eoe.cn/topic/summary 文档内容 API概述 Android中manifest文件需求 工作的设备 * 发现设备 * 获得和设备进行“交流”的权限 ...
- [技术翻译]Guava官方文档Ordering
关于排序 Guava的链式比较器 例子 assertTrue(byLengthOrdering.reverse().isOrdered(list)); 梗概 Ordering是Guava的链式比较器类 ...
- 官方文档中文版!Spring Cloud Stream 快速入门
本文内容翻译自官方文档,spring-cloud-stream docs,对 Spring Cloud Stream的应用入门介绍. 一.Spring Cloud Stream 简介 官方定义 Spr ...
随机推荐
- PageBean分页组件
Page.java package org.guangsoft.bean; import java.util.List; public class Page { private int current ...
- MVC学习笔记---MVC导出excel(数据量大,非常耗时的,异步导出)
要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指 ...
- .net自定义事件,经典简单实例代码
1,新建一个控制台应用程序TestDelegate,本项目主要实现:热水器加热,报警器监控,当热水温度达到80度的时候报警器报警这样一个简单的事件处理程序 2,定义委托处理程序 public dele ...
- hdu 1215 筛法
求小于n的n的因子之和 Sample Input 3 2 10 20Sample Output 1 8 22 #include<cstdio> #include<iostream&g ...
- 从源码编译Chrome(chromium)
转自:http://www.udpwork.com/item/13827.html 官网描述 http://www.chromium.org/developers/how-tos/build-inst ...
- BZOJ1189: [HNOI2007]紧急疏散evacuate 二分+最大流
1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1132 Solved: 412[Submi ...
- Hark的数据结构与算法练习之地精(侏儒)排序
算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小 ...
- HealthKit开发教程之HealthKit的复合数据
HealthKit开发教程之HealthKit的复合数据 复合数据就是复合单位和值构成的数据.所谓复合单位就是由单位进行乘法.除法等得到的单位,如m/s.lb·ft等就是复合单位.本节将针对这些复合数 ...
- JS插件
1.Placeholders.js 所有的浏览器都支持placeholder,唯独IE不支持.现在我们有了这款插件,IE下终于可以支持了! 2.Html5shiv.js 主要解决HTML5提出的新的元 ...
- HashMap两种遍历数据的方式
HashMap的遍历有两种方式,一种是entrySet的方式,另外一种是keySet的方式. 第一种利用entrySet的方式: Map map = new HashMap(); Iterator i ...