什么是代理,知道怎么用,见过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. 两个文件去重的N种姿势

    最近利用shell帮公司优化挖掘关键词的流程,用shell替代了多个环节的操作,极大提高了工作效率. shell在文本处理上确有极大优势,比如多文本合并.去重等,但是最近遇到了一个难搞的问题,即两个大 ...

  2. [Android Memory] App调试内存泄露之Context篇(下)

    转载地址:http://www.cnblogs.com/qianxudetianxia/p/3655475.html 5. AsyncTask对象 我N年前去盛大面过一次试,当时面试官极力推荐我使用A ...

  3. 教官的游戏(codevs 2793)

    题目描述 Description 有N个学生刚吃完饭,准备出食堂. 国防学校有个规矩:必须2人一排或3人一列离开. 两个教官A,B轮流取2或3人,谁先取完谁就赢得游戏.(A先取) 若两人都用最优策略, ...

  4. Controller与View之间的数据传递

    1)Controller向View传递数据ViewData["message"] = "Hello";//使用ViewData传递数据ViewBag.Time ...

  5. delete 类对象指针的注意事项]

    http://blog.csdn.net/infoworld/article/details/45560219 场景:1. C++类有构造和析构函数,析构函数是在类对象被delete时(或局部变量自动 ...

  6. ListView滑动删除效果实现

    通过继承ListView然后结合PopupWindow实现 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0" ...

  7. ubuntu 彻底删除卸载

    1911 sudo apt-get install zabbix-agent 1916 sudo apt-get autoremove zabbix_agent root@(none):~# apt- ...

  8. Net4.0---AspNet中URL重写的改进(转载)

    转载地址:http://www.cnblogs.com/oec2003/archive/2010/07/27/1785862.html URL重写有很多的好处,如有利于SEO.便于记忆.隐藏真实路径使 ...

  9. python联接主流SQL的类库个人收藏

    我现在主要是用以下这个类库来分别连接oracle,postgresql,mysql,mssql的. PyMySQL,pymssql,cx_Oracle,psycopg2 收藏 一下.. https:/ ...

  10. hdu 4021 n数码

    好题,6666 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2652410.html 题意:给出一个board,上面有24个位置,其中2 ...