ios - UIKit 背后的设计模式

标签 ios objective-c design-patterns

我最近开始使用 iOS 应用程序。我可以看到,许多 UIKit 提供的现成对象都使用委托(delegate)模式。例如,UITableView 有一个数据源和一个为其提供数据和其他 TableView 功能的委托(delegate)。

那么,这个委托(delegate)模式背后的底层设计模式是策略设计模式吗?对我有利的原因是,在策略模式中,委托(delegate)对象有一个对委托(delegate)的引用,该委托(delegate)确认了一个特定的接口(interface)。

可以这么说,我有一个 MyDataSource 类,它确认协议(protocol)/接口(interface) UITableViewDataSource 并且我在 MyDataSource 中实现了行为。然后我将 MyDataSource 的一个实例传递给 UITableView。这就是我们在策略模式中所做的。那么我的理解对吗?

最佳答案

您指的是一个名为 delegationCocoa/CocoaTouch 设计模式.我认为您的理解非常准确,但是在您在帖子末尾给出的示例中,很可能是 UITableViewMyDataSource 对象发送消息并传递本身作为协议(protocol)方法参数之一。

一个例子是这样的——

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath

上述方法由delegate对象实现,会实现自己的策略。调用此方法的 collectionView 作为参数之一传入。

此外,UITableView 必须有一种访问 MyDataSource 对象的方法。这是通过设置 delegate/dataSource 属性来实现的。通常是id类型,弱引用。

请查看this SO post有关策略模式与委托(delegate)同义的更多信息。

关于ios - UIKit 背后的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613615/

相关文章:

java - 访问者模式和策略模式有什么区别?

java - 实现依赖注入(inject)设计模式

iphone - iOS Facebook SDK-获取 friend 的电子邮件

iphone 如何使用 sqlite 获取组部分 tableview 的姓氏首字母?

objective-c - 如何获取符合 Xcode 4 中特定协议(protocol)的所有类的列表?

java - Java Streams 是迭代器设计模式的实现吗?

ios - 在 viewDidLayoutSubviews 中以编程方式创建 UIView

ios - 如何删除NSCache中的所有缓存?

ios - 导航栏在 iOS 13 中无法正常显示

ios - 删除所述 PFObject 时删除指向 PFObject 的内容的建议方法