发布网友 发布时间:2022-03-04 04:44
共1个回答
热心网友 时间:2022-03-04 06:13
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 尤其适用于视图之间的行为交互。