【问题标题】:Mixing Blocks and Delegates in Objective-C [duplicate]在 Objective-C 中混合块和委托 [重复]
【发布时间】:2015-04-22 18:55:29
【问题描述】:

代理收到消息时是否可以运行块?

例如,如果我有一个将 void 块作为参数的框架(我们将其称为“成功”块),并且正在使用 NSURLConnection 委托来处理这些方法参数,当我收到一个来自网页的响应,如何调用方法参数中传递的“成功”块?

这对我来说真的很难解释,我显然没有任何代码,但如果您有任何问题,我可以澄清一下。

【问题讨论】:

标签: ios objective-c objective-c-blocks


【解决方案1】:

你绝对可以。这就是 all 完成处理程序/回调的工作方式。实际上,这就是块的作用

举个简单的例子,考虑这个 NSURLConnection 类方法:

+ (void)sendAsynchronousRequest:(NSURLRequest *)request
                          queue:(NSOperationQueue *)queue
              completionHandler:(void (^)(NSURLResponse *response,
                                          NSData *data,
                                          NSError *connectionError))handler

对于第三个参数,您传递一个块。而当请求结束时,在未来的某个时间,NSURLConnection 会做什么?它调用块。

因此,您可以执行与 NSURLConnection 完全相同的操作。你可以写一个方法来接受一个块,你抓住这个块,你做一些可能需要一些时间的事情,然后你调用这个块。

【讨论】:

  • 你如何存储/调用块?
  • 您存储它的方式与存储任何东西的方式相同 - 在变量/属性中。而且你调用它的方式与调用任何函数的方式相同:你说它的名字后跟括号(你知道,其中有参数)。
  • “我不知道这是可能的” 但是你不得不怀疑你一直认为块是什么。您曾经使用过的每个块都以这种方式工作。一个块是调用。否则有什么意义呢? :) 唯一的区别是你总是让别人else接收它,挂在它上面,然后调用它。现在,会收到它,抓住它,然后调用它。
  • @Vig 我以前用过积木,老实说,这个网站是一种生活品味。喜欢它。
  • 这是我自己的代码中的一个示例,其中我做了一些 非常 类似于您所描述的内容:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/…
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多