この簡単な例を考えてみましょう
int i = 42;
int (^aBlock)() = ^ {
return i;
};
NSLog(@"Class: %@", [aBlock class]);
ARC がないと、上記のコードが出力されます
Class: __NSStackBlock__
一方、ARCでは印刷されます
Class: __NSMallocBlock__
シンボリック ブレークポイントを配置した_Block_copy
ところ、ARC が呼び出しを挿入しているように見えBlock_Copy()
、ブロックがヒープに移動されました。
これは不必要なオーバーヘッドのように思われ、そもそもブロックをスタックに置くという目的全体を無効にします。
これは ARC の制限ですか、それとも設計上の選択ですか?