1

我找不到任何关于块和垃圾收集的参考资料;甚至“Apple Bocks Reference”也没有提及它(只是几个注释)。

我从未在 GC 环境中使用块进行开发,我想知道它是如何工作的,支持什么以及整个过程有多少“自动”。

谢谢你的建议。

4

2 回答 2

0

作为实现优化块最初是堆栈分配的;这意味着您可以毫无问题地将它们向下传递。

但是,如果您希望将它们向上传递(作为返回值)或存储它们,则必须首先将它们复制到堆中。一旦在堆上正常内存管理规则适用,无论您使用的是 MRC、GC 还是 ARC - 所以它们在 GC 下工作正常。

要将它们复制到堆上,如果您使用 GC 或 MRC,则必须使用 block_copy()(或 [copy]);在 ARC 下,只要你不抛弃类型(例如,通过分配给 type 的变量id),那么 block_copy 在存储到强变量或从函数返回时是自动的 - 但调用它不会造成任何伤害,所以如果有疑问你可以叫它。

于 2012-06-30T04:23:14.323 回答
0

较新的文档中没有讨论垃圾收集是有原因的,并不是垃圾收集太新。

观看 WWDC 2012 第 101 场会议,时间为 1:13:00—1:14:10。此会话受 NDA 保护,但观看该会话 70 秒后您将不会使用垃圾收集。(一旦细节公开,我会更新这个答案,当山狮发货时他们应该这样做。)

此外,请参阅Chris Lattner 的帖子。Chris Lattner 为 Apple 工作,并在 WWDC 之前发布了此内容。

底线:

  1. 不要使用垃圾收集。
  2. 如果您正在使用垃圾收集,您将希望在 Xcode 4.4 发布后进行迁移。
于 2012-06-30T04:48:20.817 回答