什么是代理,知道怎么用,见过N次。会用代理传值,还不够。代理到底是用来干嘛的嘛?还是看看官方文档吧,自己翻译出来看看是不是通顺

代理:

代理是一个简单高效的模式,尤其是一个类在编程的过程中代表或者需要和另一个类协调的时候。委托对象(委托方)会持有代理对象(代理方)的一个引用,并在合适的时机给代理方发送一个消息。这个消息通知代理方,委托方将要处理一个件事或者刚处理完一件事。代理方可能会对这个消息做出相应,如更新自己或者其他类的界面或状态,并且在一些情况下,代理方可以返回一个值,来影响一个即将被处理的事件。代理最主要的价值在于它使得你能够轻松的在一个中心类里自定义多个类的行为事件。

代理和cocoa框架

委托对象通常是一个框架对象,代理对象通常是一个自定义控制器对象。在一个托管的内存环境下,委托对象会持有一个它自己代理对象的弱引用;在有垃圾收集的环境下,接受者[1]会对他的代理持有一个强引用。代理的例子在Foundation框架,UIKit,AppKit,和其他的cocoa,cocoa Touch框架里随处可见。

举一个委托方的例子:在AppKit框架里,有一个NSWindow类的实例,NSWindow 在他的方法windowShouldClose:中声明了一个协议,当用户点击关闭窗口的按钮时,这个窗口对象就会发送windowShouldClose:方法给他的代理对象,来询问它是否要确认关闭窗口。代理会返回一个布尔值,这样就能控制窗口对象的行为了。

代理和通知

代理方在多数cocoa 框架的类中,会自动注册为委托方所发送通知的观察者。代理方只需要实现一个由框架类声明的通知方法,来接受这个特别的通知消息。如上面列出的例子,一个窗口类发出一个NSWindowWillCloseNotification 消息给观察者们,但是是发出一个WindowShouldClose:消息给它的代理。

数据源

一个数据源几乎和一个代理一样。不同之处就在于和委托方的关系。与用户接口的控制器被代理 不同,一个数据源被数据控制器代理。委托对象通常是视图对象,如一个tableView (表视图),它通常对他的数据源持有一个引用,并且经常向数据源请求将要展示的数据。一个数据源和打理一样,必须采用一个协议并且至少要实现一个该代理必须要实现的方法。数据源负责管理模型对象,这样模型对象会被传送到委托视图上。

原文地址:

https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

自己翻译 delegation 官方文档的更多相关文章

  1. 为开源社区尽一份力,翻译RocketMQ官方文档

    正如在上一篇文章中写道:"据我所知,现在RocketMQ还没有中文文档.我打算自己试着在github上开一个项目,自行翻译."我这几天抽空翻译了文档的前3个小节,发现翻译真的不是一 ...

  2. [翻译]PyMongo官方文档

    PyMongo官方文档翻译 周煦辰 2016-06-30 这是本人翻译的PyMongo官方文档.现在网上分(抄)享(袭)的PyMongo博客文章很多,一方面这些文章本就是抄袭的,谈不上什么格式美观,另 ...

  3. Apache Flume入门指南[翻译自官方文档]

    声明: 根据官方文档选择性的翻译了下,不对请指正 https://flume.apache.org/FlumeUserGuide.html

  4. [翻译]Android官方文档 - 通知(Notifications)

    翻译的好辛苦,有些地方也不太理解什么意思,如果有误,还请大神指正. 官方文档地址:http://developer.android.com/guide/topics/ui/notifiers/noti ...

  5. 我为什么要翻译ES6官方文档

    ES6出来很久了,现在网上也有很多教程,其中以阮一峰老师的教程最为经典.大家通过学习阮老师的教程肯定能学懂ES6最新的技术. ES6官方文档是一个规范,各浏览器在实现ES6的具体API时都会遵循它.我 ...

  6. Android Support Library 23.2介绍(翻译自官方文档)

    Android Support Library 23.2 (译者注:本文标注了部分文字链接,但须要***,要查看全部链接.请查看sukey=014c68f407f2d3e181b6b5e665f26a ...

  7. 【Android开发】Android Host详解(翻译自官方文档)

    原文:http://android.eoe.cn/topic/summary 文档内容 API概述 Android中manifest文件需求 工作的设备 * 发现设备 * 获得和设备进行“交流”的权限 ...

  8. [技术翻译]Guava官方文档Ordering

    关于排序 Guava的链式比较器 例子 assertTrue(byLengthOrdering.reverse().isOrdered(list)); 梗概 Ordering是Guava的链式比较器类 ...

  9. 官方文档中文版!Spring Cloud Stream 快速入门

    本文内容翻译自官方文档,spring-cloud-stream docs,对 Spring Cloud Stream的应用入门介绍. 一.Spring Cloud Stream 简介 官方定义 Spr ...

随机推荐

  1. WebStorm设置字体和颜色

    新建Scheme + 修改字体 ctrl+alt+s打开Settings界面,Editor > Colors&Fonts > Font. Default scheme是亮色调,但我 ...

  2. “破锣摇滚”乐队(codevs 1444)

    题目描述 Description 你刚刚继承了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权.你打算从中精选一些歌曲,发行M(1 <= M <= ...

  3. Android之Activity框架

    在安卓应用中,经常需要Activity中经常需要有大量相似的Activity类,这些类往往有相似的结构与功能,因此产生了大量重复代码,为此,以下提供一种方法有效的降低了代码冗余. 定义Activity ...

  4. Ubuntu中root用户和user用户的相互切换

    转:Ubuntu是最近很流行的一款Linux系统,因为Ubuntu默认是不启动root用户,现在介绍如何进入root的方法. (1)从user用户切换到root用户 不管是用图形模式登录Ubuntu, ...

  5. linux 远程 windows 命令:rdesktop vs windows mstsc

    [root@bass tmp]# which rdesktop /usr/bin/rdesktop [root@bass tmp]# rpm -qf /usr/bin/rdesktop rdeskto ...

  6. freopen()——重定向标准输入输出流

    freopen()——重定向标准输入输出流 头文件:stdio.h 函数原型:FILE * freopen(const char *filename , const char *type ,  FIL ...

  7. 程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...

    程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...

  8. 编辑WCF配置不出现

    在使用VS2010创建

  9. hadoop系列讨论

    生产环境下cloudera的cdh版本更受欢迎,但是貌似cloudera对于YARN的开发力度不是很突出,所以在apache与cdh版本选择的时候,大家是怎么考虑的? 主要关注生产环境下的运维成本,期 ...

  10. mvc-4控制器和状态(1)

    导语 将状态保存在客户端可以加快页面反映:但应当避免状态或数据保存在DOM中:在MVC中,状态应该保存在控制器中 控制器是视图和模型的纽带,只有控制器知道视图和模型的存在并将它们连接在一起:当加载页面 ...