22得票1回答
如何从完成块中检索返回值?

能否在主线程上运行完成块? 例如,我有一个方法返回一个值:- (int)test { /* here one method is called with completion block with return type void */ [obj somemethodwi...

7得票2回答
如何在NSDictionary类的enumerateObjectsUsingBlock块中使用停止条件?

我希望在我的类中创建一个方法,类似于NSDictionary类的enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)方法。 我对块的使用有一些了解,但我无法弄清如何创建enumerateObjectsUsingBlo...

17得票4回答
iOS中如何使用GCD的dispatch_barrier_async(似乎在其他块之前而不是之后执行)?

我想在iOS5中同步执行以下代码: 一个对象有一个方法,该方法从中发出HTTP请求并获取一些数据,包括图像的URL。 一旦数据到达,文本数据用于填充CoreData模型。 同时,异步分派第二个线程以下载图片;当图片已缓存并可在CoreData模型中使用时,此线程将通过KVO向viewCon...

14得票1回答
Objective-C块作为返回值的类型

我该如何编写以下内容: typedef void (^T)(void); T f() { return ^{}; } 没有typedef的情况下呢?

34得票3回答
如何使用Block简化回调逻辑?

假设我需要与一个提供协议并在操作完成时调用委托方法的类进行通信,如下所示:@protocol SomeObjectDelegate @required - (void)stuffDone:(id)anObject; - (void)stuffFailed; @end @interface...

9得票4回答
这个符号 ^ 的语法表示什么?两边都是 void 是什么意思?

在iPhone SDK 4.0中,UIApplication有一个新的方法setKeepAliveTimeout:,需要一个类型为void(^)(void)的第二个参数。 -(BOOL)setKeepAliveTimeout:(NSTimeInterval)timeout handler:(...

406得票8回答
在块内部分配一个变量给块外部的变量

我遇到了一个错误 变量不可赋值(缺少 __block 类型说明符) 在这一行 aPerson = participant;。我该如何确保该块可以访问 aPerson 变量并且 aPerson 变量可以被返回?Person *aPerson = nil; [participants...

40得票4回答
在从UIViewController调用的非保留完成块中引用self时,是否真的需要使用weakSelf/strongSelf技巧?

假设我有一个在UIViewController子类中的以下方法:- (void)makeAsyncNetworkCall { [self.networkService performAsyncNetworkCallWithCompletion:^{ dispatch_a...

74得票4回答
为什么运行时 nil / NULL 块会导致总线错误?

我开始大量使用块并很快发现,nil 块会导致总线错误:typedef void (^SimpleBlock)(void); SimpleBlock aBlock = nil; aBlock(); // bus error 这似乎与Objective-C通常忽略对空对象发送消息的行为相违背:NS...

9得票2回答
Objective C块作为异步回调和BAD ACCESS问题

我有一个严重的疑问。假设如下场景: 1. 您正在屏幕上使用一个 UIViewController。 2. 应用程序使用一个块作为回调来启动后端调用。 3. 您使用“self”代理,以防止保留循环。 4. 用户点击“返回”,并且 UIViewController 被释放。 5. 迟早,回调块将...