10

この簡単な例を考えてみましょう

int i = 42;
int (^aBlock)() = ^ {
    return i;
};
NSLog(@"Class: %@", [aBlock class]);

ARC がないと、上記のコードが出力されます

Class: __NSStackBlock__

一方、ARCでは印刷されます

Class: __NSMallocBlock__

シンボリック ブレークポイントを配置した_Block_copyところ、ARC が呼び出しを挿入しているように見えBlock_Copy()、ブロックがヒープに移動されました。

これは不必要なオーバーヘッドのように思われ、そもそもブロックをスタックに置くという目的全体を無効にします。

これは ARC の制限ですか、それとも設計上の選択ですか?

4

1 に答える 1