gpt4 book ai didi

ios - Objective C 委托(delegate)或 C 风格的 block 回调?

转载 作者:可可西里 更新时间:2023-11-01 03:05:59 25 4
gpt4 key购买 nike

我正在设计一个类,只要有事情发生,它就会“触发事件”。这些事件往往与 UI 无关。我想知道这样做的最佳方法是什么。我一直在探索:

委托(delegate)

我将定义一个委托(delegate)类,在 init 函数中接受委托(delegate),并在事件发生时调用委托(delegate)类上的方法。

C 风格 block

我将定义一个函数指针,并在 init 函数中接受一个函数。我会在事件发生时调用它。

在这两种情况下,我可能需要处理多个“源”,因此我需要一组委托(delegate)或 block 。

我注意到在 iOS 编程中,委托(delegate)往往更受青睐,尤其是对于 UI 框架。但我来自函数式编程背景,我绝对乐于在调用点接受函数点和传递 lambda,而且我喜欢编译器为你处理提升变量,而且你通常需要更少的类状态。但我看到很多 iOS 开发人员都在使用委托(delegate)。

在 iOS 中通常首选的执行此操作的机制是什么?

最佳答案

各有各的用途。

当有多个“事件”时,应使用委托(delegate)来告知委托(delegate)关于和/或类何时需要从委托(delegate)获取数据。 UITableView 就是一个很好的例子。

当只有一个(或两个)事件时最好使用 block 。完成 block (也可能是失败 block )就是一个很好的例子。一个很好的例子是 NSURLConnection sendAsynchronousRequest:queue:completionHandler:

第三个选项是通知。当事件中可能有多个(和未知的)感兴趣方时,最好使用此方法。其他两个仅在存在一个(且已知的)相关方时才有用。

关于ios - Objective C 委托(delegate)或 C 风格的 block 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21771606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com