ブロックとガベージ コレクションに関するリファレンスが見つかりません。「Apple Bocks Reference」でさえ、それについて何も言及していません(ほんの少しのメモです)。
私は GC 環境でブロックを使用して開発したことはありません。それがどのように機能するか、何がサポートされているか、プロセス全体がどの程度「自動」であるかを知りたいです。
前もって感謝します。
ブロックとガベージ コレクションに関するリファレンスが見つかりません。「Apple Bocks Reference」でさえ、それについて何も言及していません(ほんの少しのメモです)。
私は GC 環境でブロックを使用して開発したことはありません。それがどのように機能するか、何がサポートされているか、プロセス全体がどの程度「自動」であるかを知りたいです。
前もって感謝します。
実装として、最適化ブロックは最初にスタック割り当てされます。これは、問題なくスタックに渡すことができることを意味します。
ただし、それらを(戻り値として)スタックに渡すか、格納する場合は、最初にヒープにコピーする必要があります。ヒープに入ると、MRC、GC、またはARCのいずれを使用していても、通常のメモリ管理ルールが適用されるため、GCで正常に機能します。
それらをヒープにコピーするには、GCまたはMRCを使用している場合はblock_copy()(または[copy])を使用する必要があります。ARCでは、型を捨てない限り(たとえば、型の変数に割り当てることによって)id
、強力な変数に格納したり関数から戻ったりするときにblock_copyが自動的に実行されますが、それを呼び出しても害はありません。あれを呼べ。
ガベージ コレクションが新しいドキュメントで説明されていないのには理由があり、ガベージ コレクションが新しすぎるというわけでもありません。
WWDC 2012 セッション 101 の 1:13:00 ~ 1:14:10 をご覧ください。このセッションは NDA の下にありますが、そのセッションを 70 秒間見た後はガベージ コレクションを使用しません。(詳細が公開されたら、この回答を更新します。これは、Mountain Lion の出荷時に行う必要があります。)
また、Chris Lattner の投稿も参照してください。Chris Lattner は Apple で働いており、WWDC の前にこれを投稿しました。
結論: