ios - 我需要了解为什么 Objective-C 中的委托(delegate)如此重要,是什么让它如此特别?

标签 ios objective-c swift delegates delegation

所以我已经阅读了很多关于委托(delegate)的解释和实践,但我似乎仍然不明白,我有具体的问题,我希望得到一些有见地的简单答案。

  1. 为什么在实例方法上使用委托(delegate)?在 UIAlertView为什么不直接制作 – alertView:clickedButtonAtIndex:将在我的 UIAlertView 上调用的实例方法实例?

  2. 委托(delegate)属性是什么?为什么我必须创建委托(delegate)属性并使用奇怪的语法定义它 @property (nonatomic, strong) id <ClassesDelegate> delegate

  3. delegate 和 protocol 是硬币的两个面吗?

  4. 我什么时候知道应该在我的应用中实现委托(delegate)而不是直接调用?

  5. 委托(delegate)在 Swift 中的使用是否同样广泛和重要?

  6. 首先调用什么?为什么?类中谁让自己成为委托(delegate)的方法?还是在声明它的类中的委托(delegate)方法本身?

感谢您抽出宝贵的时间来解决这个问题,我迫切希望为我的问题寻找一个清晰而有用的答案,请随意举例或涵盖一些相关主题!

最佳答案

委托(delegate)的优点是依赖倒置。

通常代码在运行时调用依赖的方向上有一个编译时依赖。如果是这种情况,UITableview 类将在编译时依赖我们的代码,因为它会调用我们的代码。通过使用委托(delegate),这是相反的,我们的代码在编译时依赖于 UITableview 类,但 UITableview 类在运行时调用我们的代码。

这涉及到成本:我们需要设置委托(delegate),UITableview 必须在运行时检查委托(delegate)方法是否已实现。

注意:当我说 UITableview 时,我包括了 UITableviewDelegateUITableviewDatasource

参见:Dependency inversion principleClean Code, Episode 13 .

关于ios - 我需要了解为什么 Objective-C 中的委托(delegate)如此重要,是什么让它如此特别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25826840/

相关文章:

ios - Google Cardboard - 是否有适用于 Cardboard VR 套件的 iPhone/iOS 入门项目?

ios - 创建 React Native 库并将 CocoaPods 添加到该库

ios - Xcode 9 Swift 语言版本 (SWIFT_VERSION)

objective-c - 如果@protected 是默认值,为什么这个ivar 需要@protected?

objective-c - [NSDate date]和the年的问题

iOS 在被杀死/暂停时快速后台位置更新,数据丢失最少

objective-c - 是否可以在iOS5中确定iPhone 4s的网络类型(GSM/CDMA)

objective-c - 将 NSString 转换为 NSDictionary

ios - 在 Swift 中将 CLLocation 转换为 MKMapItem

swift - 核心数据处理集