在核心数据最佳实践的 WWDC 2012 视频中,该人指出 performBlockAndWait: 不包含自动释放池。(而 performBlock: 会)
为什么不?这样做的具体后果是什么?我是否需要将块内容包装在自动释放池中 - 所有苹果示例都不这样做。或者他的观点是对比 performBlock: 而这不需要一个。
班德加派萨,
A -performBlockAndWait:受益于周围的自动释放池。(-performBlockAndWait: 似乎直接在当前线程上执行。)因此,它不需要自己的自动释放池。
安德鲁
performBlockAndWait:
是可重入的。它不提供自动释放池或处理用户事件(它不调用processPendingChanges
),并在上下文队列管理的线程上执行。
因为它是可重入的,所以它阻塞调用线程直到完成。这种行为与自动释放池和 Core Data 用户事件都不兼容,这就是它不使用它们的原因(而performBlock:
)。