如何理解 iOS Delegate 设计模式
2014-12-09 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517196
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
Delegate ,又称为 委托或代理, 它是一种设计模式。 学习iOS开发,需要深入理解 Delegate的用法。 Apple 对Delegate 有明确的说明。但理解起来还是有些抽象。
Delegate的用途:
用于改变或控制其他对象 。
Delegate 的定义:
(1)Delegate 是一个对象, 其类型为 id (anonymous type: 匿名类型);
(2) Delegate 的引用通常是一个实例变量 (instance variable), 命名为 delegate;
(3)Delegate 内所用的方法是 访问模式 (Accessors pattern)
Delegate Message 的命名:
发给Delegate的消息 通常带有(should, will, did) 之一。
should:期待delegate返回一个值;
will:表示变化发生之前 要做的事情;
did : 表示变化发生之后 要做的事情。
Cocoa Touh 的很多类都不同程度地用到Delgete。 比如: NSTextField, NSTableView。 其中 NSTableView 还用到了 Data Source。
其实,Data Source 也是一种委托。 Data Source 减少了 View 与 Model 之间的耦合性。 其中 , NSAppplication 实现了几十个委托方法。
Delegate 使用的注意事项:
Delegate 是一个 ID 类型的对象, 同样存在创建和释放问题。 对于Data Source , 只有Data Source的使用者 (比如Table View)释放后, Data Souce 才能被释放。 否则, 就会出现crash。 因为在table view 获取数据时, 数据已经不见了。
Delegate 可用在多个场景下,比如对象间的数据交互, 不同视图之间的行为交互。 若仅仅是数据交互, 可实现的方法还有很多。Delegate 尤其适用于视图之间的行为交互。
Delegate的用途:
用于改变或控制其他对象 。
Delegate 的定义:
(1)Delegate 是一个对象, 其类型为 id (anonymous type: 匿名类型);
(2) Delegate 的引用通常是一个实例变量 (instance variable), 命名为 delegate;
(3)Delegate 内所用的方法是 访问模式 (Accessors pattern)
Delegate Message 的命名:
发给Delegate的消息 通常带有(should, will, did) 之一。
should:期待delegate返回一个值;
will:表示变化发生之前 要做的事情;
did : 表示变化发生之后 要做的事情。
Cocoa Touh 的很多类都不同程度地用到Delgete。 比如: NSTextField, NSTableView。 其中 NSTableView 还用到了 Data Source。
其实,Data Source 也是一种委托。 Data Source 减少了 View 与 Model 之间的耦合性。 其中 , NSAppplication 实现了几十个委托方法。
Delegate 使用的注意事项:
Delegate 是一个 ID 类型的对象, 同样存在创建和释放问题。 对于Data Source , 只有Data Source的使用者 (比如Table View)释放后, Data Souce 才能被释放。 否则, 就会出现crash。 因为在table view 获取数据时, 数据已经不见了。
Delegate 可用在多个场景下,比如对象间的数据交互, 不同视图之间的行为交互。 若仅仅是数据交互, 可实现的方法还有很多。Delegate 尤其适用于视图之间的行为交互。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询