774得票20回答
如何在延迟后触发一个块,类似于-performSelector:withObject:afterDelay:?

有没有一种方法可以在延迟后使用一个原始参数调用块,就像使用 performSelector:withObject:afterDelay: 一样,但参数是像 int/double/float 这样的类型?

480得票8回答
“__block”关键字是什么意思?

__block 关键字在 Objective-C 中的确切含义是什么?我知道它允许你在块内修改变量,但我想知道... 它具体告诉编译器什么? 它还有其他作用吗? 如果这是它唯一的作用,那么为什么需要它呢? 文档中是否有相关内容?(我找不到)

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

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

331得票8回答
我可以使用Objective-C块作为属性吗?

是否可以使用标准属性语法将块作为属性? ARC 有哪些变化?

282得票7回答
块声明语法列表

Objective-C中的块语法(以及我假设的C语言)非常不协调。将块作为参数传递与声明块作为实例变量不同,这与使用typedef定义块不同。 是否有一个全面的块声明语法列表可供参考?

221得票8回答
当实现API时,如何避免在块中捕获自身?

我有一个可用的应用程序,并且正在将其转换为Xcode 4.2中的ARC。其中一个预检查警告涉及在块中强烈捕获self,导致保留循环。我已经制作了一个简单的代码示例来说明这个问题。我相信我理解了这意味着什么,但不确定实现这种情况的“正确”或推荐方式。 self是类MyAPI的一个实例 下面的...

202得票10回答
等待两个异步块执行完毕再开始另一个块。

使用GCD时,我们希望在继续执行下一步之前等待两个异步块被执行并完成。最佳方法是什么? 我们尝试了以下方式,但似乎不起作用:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ { /...

169得票9回答
`self`与块中的保留循环问题

我很抱歉,这个问题可能相当基础,但我认为它与很多进入块编程的Objective-C程序员相关。 我听说由于块捕获其中引用的本地变量作为const副本,因此在块内使用self可能会导致循环引用,如果该块被复制。因此,我们应该使用__block来强制块直接处理self,而不是将其复制。__blo...

158得票8回答
在Swift中将闭包存储为变量

在 Objective-C 中,你可以定义块的输入和输出,存储方法中传入的其中一个块,然后在以后使用该块: // in .h typedef void (^APLCalibrationProgressHandler)(float percentComplete); type...

151得票6回答
何时使用enumerateObjectsUsingBlock和for循环?

除了明显的区别: 当您需要索引和对象时,请使用enumerateObjectsUsingBlock 当您需要修改局部变量时,请勿使用enumerateObjectsUsingBlock(我对此错误,参见bbum的答案) 当for (id obj in myArray)也可以正常工作时,...