<wbr>转载自:<a href="http://leopard168.blog.163.com/blog/static/168471844201111411729597/">http://leopard168.blog.163.com/blog/static/168471844201111411729597/</a><br></wbr>
谈起软件开发设计模式,一口气可以说上几十种。 就iOS 而言, 最为凸显的设计模式是 MVC (Model-View-Controller)。可以说, MVC在 iOS 平台上发挥得淋漓尽致。 为真正达到 MVC的目的, 尽可能减少视图与视图之间的耦合,iOS 又配有Notification, Delegate 等辅助设计模式。 其中Delegate (委托)最为常用。 委托设计模式大大减少了对象之间的耦合性。
iOS 编程语言是 Objective-C, 简称 OC。 谈起 OC的特性,人们常说,OC 不支持多继承。但 Delegate 弥补了这个缺陷。 有了Delegate,在声明对象时,可以使其遵循多个协议。 从而解决了多继承问题。
Delegate ,又称为 委托或代理, 它是一种设计模式。 学习iOS开发,需要深入理解Delegate的用法。 Apple 对Delegate 有明确的说明。http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html
但理解起来还是有些抽象。
Delegate的用途:
用于改变或控制其他对象 。
Delegate 的定义:
(1)Delegate 是一个对象, 其类型为 id (anonymous type: 匿名类型);
(2) Delegate 的引用通常是一个实例变量(instance variable), 命名为 delegate;
(3)Delegate 内所用的方法是 访问模式 (Accessors pattern)
DelegateMessage 的命名:
发给Delegate的消息 通常带有(should, will, did)之一。
should:期待delegate返回一个值;
will:表示变化发生之前 要做的事情;
did : 表示变化发生之后 要做的事情。
Cocoa Touh的很多类都不同程度地用到Delgete。 比如: NSTextField, NSTableView。 其中 NSTableView 还用到了 Data Source。
其实,Data Source 也是一种委托。DataSource减少了 View 与 Model 之间的耦合性。 其中 , NSAppplication 实现了几十个委托方法。
Delegate 使用的注意事项:
Delegate 是一个 ID 类型的对象, 同样存在创建和释放问题。 对于Data Source ,只有DataSource的使用者 (比如Table View)释放后, Data Souce才能被释放。否则,就会出现crash。 因为在table view 获取数据时, 数据已经不见了。
Delegate 可用在多个场景下,比如对象间的数据交互,不同视图之间的行为交互。 若仅仅是数据交互, 可实现的方法还有很多。 Delegate 尤其适用于视图之间的行为交互。
这里通过 UIActionsheet 和 UIAlertView 的使用给以说明。
UIActionsheet *actionsheet = [ [UIActionsheet alloc]
initWithTile:@”Are you sure?”
delegate: self
cancelButtonTitle: @”No Way!”
destructiveButtonTitle: @”Yes, I’m sure!”
otherButtonTitles: nil] ;
这里需特别注意 delegate:self 的使用方法。 它表明 当 actionsheet 的button 被按下时, delegate 会收到通知。更确切地说, delegate 的actionsheet:didDismisswithButtonIndex: 方法将被调用。 将self作为 delegate 参数传递给该方法,可以确保 actionsheet:didDismisswithButtonIndex:
被调用。
Cancelbutton 顾名思义,是取消按钮。 与此相对应, destructiveButton 是确定按钮。 通过delegate:self 设置,我们可以在 actionsheet:didDismisswithButtonIndex: 方法中判断 用户选择的是 取消操作还是确定操作。
如果没必要区分 哪个按钮给按下, 直接使用 UIAlertView 即可, 实例如下:
UIAlertView *alert = [ [UIAlertView alloc]
initWithTitle:@ “Something was done”
message: @”Everything is OK”
delegate: nil
cancelButtonTitle:@”Cancel”
OtherButtonTitles:nil ];
每个view 都有自己的delegate,同样, UIAlertView 也有自己的delegate, 如果我们想知道用户何时关闭了 AlertView 提示框,或想判断用户按下的是哪个按钮,就可以使用 delegate:self。 其实这里的alertView 只是向用户提供了一个按钮,根本无需判断用户按下的是哪个按钮,因此声明 delegate:nil 即可。
分享到:
相关推荐
代码实现代理模式。具体文章简介可以参考博文:http://blog.csdn.net/lovefqing/article/details/8270111
网上也有很多Delegate的Demo,比较乱,感觉不容易看懂。本来一个很简单的问题,大家搞得这么复杂。这个Demo就通俗易懂、简单、实用
ios设计模式delegate 示例 ,导航功能的两个视图控制器(用push方式从一个窗口推到另一个窗口),第二个窗口创建两个按钮,标题分别为红色和绿色,点相应的按钮弹回前一个窗口,同时前一个窗口的背影色变成按钮标题...
iOS 的delegate代码是http://blog.csdn.net/ilikeprograming/article/details/26206075的附件。这份代码有助于新手理解delegate。
首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个意思,除非委托2个中文字不认识,举个例子,小明委托小张去买车票。 但是在我们的程序世界里,也是这么的简单吗?当然,什么是OO,OO就是...
ios的delegate虽然很简单,但是搞清楚不容易。本demo简单清晰明了,希望可以帮助到大家。效果图,及其说明如:http://blog.csdn.net/robinson_911/article/details/41900453
Cocoa Touch框架下使用大量使用委托(delegation),根据苹果公司的文档,delegate是Cocoa Touch框架所采用的委托模式的一种形式。例子实现一个自己构建的类似于UIButton功能的组件。
具体见我的博客分析:http://blog.csdn.net/robinson_911/article/details/39673625
delegate、五步曲、调用照相机、切换键盘
IOS 利用Delegate传值 实现了利用Delegate协议进行传递数据的功能。
IOS开发delegate Demo
如题 源码是xcode4.5 ios6.0 环境写成的 做为基础扫盲 可以学到presentModalViewController 的使用 页面跳转的效果等
委托的简单理解: 参考了一些资料整合起来 写了个小程序,使您能充分理解和使用————delegate ,委托
委托 和 事件在 .Net ...本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
delegate和block是iOS上常用于实现回调的两种机制,Demo将两者进行了简单的归类与对比。
Delegate '委托,带参数的方法,多线程,可以轻松在线程中传递参数,获取返回值.
ios socket delegate sqlite实例
NULL 博文链接:https://dingran.iteye.com/blog/1769545
delegate 委托 匿名方法 自动属性 集合初始化器 类初始化器 委托方法
ios app :使用delegate事例