我们为什么要复制块而不是保留?

我最近遇到了使用Facebook的应用程序切换使用块的问题。 Facebook登录后我需要拨打电话。

当应用程序切换回来时,首先我的块被销毁(因为它在堆栈中),所以我决定保留它。 但那不起作用,我搞砸了这个问题:/。 我在那个博客上也找到了解决方案。

我的问题很简单: 为什么复制工作和保留不

因为当你创建一个块时,没有什么可以保留,因为它在堆中不存在,直到你用Block_copy复制它。 WWDC关于块的讲座涵盖了这一点。

更多信息: http : //www.friday.com/bbum/2009/08/29/blocks-tips-tricks/

请参阅我最近对另一个类似问题的回答:

默认情况下,会在堆栈上创建块。 这意味着它们只存在于已创建的范围内。
[…]
有关堆栈与堆的更多信息,请阅读Mike Ash 在Objective-C中读取堆栈和堆对象 。