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

Jer*_*emy 4 ios objective-c-blocks fast-app-switching

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

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

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

bor*_*den 10

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

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


Jor*_*ers 6

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

默认情况下,会在堆栈上创建块.这意味着它们只存在于它们已经创建的范围内.
[...]
阅读Stack Ash中的堆栈和堆对象,以获取有关堆栈与堆的更多信息.