自己翻译 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 ...
随机推荐
- NEFU 1151 特殊的质数
特殊的质数 Problem:1151 Time Limit:1000ms Memory Limit:65535K Description 如果一个数是质数,而且他在质数表中的编号也是质数,称为特殊的质 ...
- BaseColumns以及自定义Column
android provider 包下自带的BaseColumn /* * Copyright (C) 2006 The Android Open Source Project * * License ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏(二)
转载自:http://www.blogjava.net/rosen/archive/2010/06/13/323522.html 前言的前言 写blog就是好,在大前提下可以想说什么写什么,不像投稿那 ...
- 【图文详解】python爬虫实战——5分钟做个图片自动下载器
python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...
- soft lockup和hard lockup介绍
转自:http://www.cnblogs.com/openix/p/4034530.html 转自:http://blog.csdn.net/panzhenjie/article/details/1 ...
- Android_adb shell am/pm使用
转自:http://blog.sina.com.cn/s/blog_51335a0001017ux5.html adb shell am instrument [options] <COMP ...
- mac os下获得root权限
警告:对系统不了解的请慎用 操作步骤:1.打开实用工具->终端2.键入sudo passwd root 然后提示你输入当前登录用户密码,通过以后,提示你输入两遍root的密码.这样你就设置好ro ...
- linux下验证码无法显示:Could not initialize class sun.awt.X1 解决方案
转自:http://my.oschina.net/xiangtao/blog/28441 网站验证码突然无法显示,并报如下错误. Caused by: java.lang.NoClassDefFoun ...
- Digital Image Processing 学习笔记2
第二章 2.1视觉感知要素 2.1.1 人眼的结构 眼睛由角膜与巩膜外壳.脉络膜和视网膜包围,晶状体由通信的纤维细胞层组成,并由附在睫状体上的纤维悬挂:视网膜上分布两类光感受器(锥状体和杆状体),他们 ...
- 终于解决SQL Server 2008 64位系统无法导入Access/Excel的问题 2012/08/01
最近更换了新服务器,操作系统Windows Server 2008 X64,数据库SQL Server 2008 X64,Office 2007(好像只有32位),在存储过程执行OpenDatasou ...