自己翻译 delegation 官方文档

什么是代理,知道怎么用,见过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

时间: 2024-11-07 11:11:59

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

【Android官方文档】翻译Android官方文档-Activities(一)

Activity是可以给用户提供交互操作的程序组件,例如打电话,拍照,发送邮件,抑或者是显示地图.通常窗口会填满屏幕,但是也可以做到比屏幕小或者是悬浮在窗口顶部. App通常由多个Activities组成,它们之间支持相互跳转.一般情况下,每个Activity在应用中都是特别的,就好像 主Activity一样,主activity是应用第一个Activity,其他Activity可以通过其他操作启动.一个新的Activity的启动,那么旧Activity就会被停止,但是系统会保存这些activit

IT忍者神龟之Struts2-Json-Plugin 的使用(翻译自官方文档)

在 Struts2 中要使用 Ajax 获得 Json 数据我认为目前还是 struts2-json-plugin 了.当然你你可以用手工用像 XStream.Google Gson.Jackson 这样的工具手工把 Java 对象转换成 Json 字符串再写往 Response 去,要写的代码自然多不了,还得留心字符集与 content type.而 struts2-json-plugin 毫无疑问是与 Struts2 最亲近了,只需你配置一些属性就能得到你想的结果. 本想分几篇逐步介绍如何使

转向ARC的说明——翻译Apple官方文档

ARC是一个编译器特征,它提供了对OC对象自动管理内存.ARC让开发者专注于感兴趣的代码和对象的关系,而不用考虑对象的retain和release. 原文地址 概要 ARC在编译时期添加代码,保证对象可用.概念上说,ARC遵循手动引用计数的规则,替开发者在编译时期添加合适的代码. Xcode4.2(Mac OS 10.6.10.7和iOS4和iOS5)支持ARC,弱引用在10.6和iOS4上不支持. Xcode提供了一个工具:自动机械得转化为ARC(比如移除retain和release的调用),

Android官方文档系列(翻译)

下面一些内容是我翻译Android官方文档相关文章. 菜鸟上路,一边学习一边整理,若您发现有错误的地方还请不吝赐教. Activity 解读Android之Activity基础知识 解读Android之任务和Back栈 Service 解读Android之Service(1)基础知识 解读Android之Service(2)Bound Service 解读Android之Service(3)AIDL ContentProvider 解读Android之ContentProvider(1)CRUD

Android官方文档之App Components(Loaders)

Loaders在Android 3.0中引入.在Activity和Fragment中,使用Loaders可以方便地加载数据.有关Activity和Fragment的介绍,您可以参考我翻译的官方文档: <Activities> <Fragments> 本文将介绍Loaders API.Loaders的启动.重启.Loaders管理器 等内容,如需访问Loaders的官方原文,您可以点击这个链接:<Loaders>. Loaders Loaders具有如下特性: 它适用于任

Android官方文档之App Components(Common Intents)

Intent的真正强大之处在于它的隐式Intent,隐式Intent需要配合Intent-filters使用,有关这方面的概念和知识,您可以参考我翻译的官方文档:<Android官方文档之App Components(Intents and Intent Filters)>. 隐式Intent足够强大,以至于系统提供了大量的Intent方便开发者启动系统应用程序,本文将介绍一些常用的隐式Intent.以及如何自定义intent-filters以匹配隐式intent. 如需阅读官方原文,您可以点

Android官方文档之Creating a Content Provider

写在前面的话:说两点.1.很荣幸自己的两篇文章< Android官方文档之App Components(Intents and Intent Filters)>.<Android官方文档之App Components(Common Intents)>被郭霖老师转载了,一方面说明我的博客内容得到了认可,另一方面也鞭策我继续写出质量更高的博文:2.最近在翻译官方文档,今天翻墙一看,发现页面改版了,而且居然默认显示了中文的文档(其实改版以前也有官方的中文文档,只是默认显示英文而已,另外中

Android官方文档之Bound Services

绑定式Service在CS结构中扮演着Server的角色.绑定式Service允许其他组件(如Activity)绑定该Service.发送请求.接收响应.甚至IPC通信( interprocess communication).绑定式Service通常服务于其他应用程序的组件.且没有明确的后台的概念(does not run in the background indefinitely). 本文将介绍bound Service的相关内容,包括其创建.与其他应用组件如何绑定 等.有关Service

Android官方文档之App Components(Common Intents)(转载)

原文地址:http://blog.csdn.net/vanpersie_9987/article/details/51244558#rd Intent的真正强大之处在于它的隐式Intent,隐式Intent需要配合Intent-filters使用,有关这方面的概念和知识,您可以参考我翻译的官方文档:<Android官方文档之App Components(Intents and Intent Filters)>. 隐式Intent足够强大,以至于系统提供了大量的Intent方便开发者启动系统应用