@autoreleasepool { }
ARC を有効にしてブロックを使用すると、コンパイラがコードを生成して、ブロックの先頭と末尾で呼び出されるobjc_autoreleasePoolPush()
と関数をそれぞれ取得することをどこかで読みました。objc_autoreleasePoolPop()
ただし、Objective-C ファイルを@autoreleasepool
ブロックでコンパイルすると、これらの 2 つの関数は呼び出されません-fobjc-arc
。NSAutoreleasePool
代わりに、コンパイラは、最初に新しいオブジェクト ( と同等のもの)を割り当て、ブロックの最後にプールを (呼び出しで)[[NSAutoreleasePool alloc] init]
排出するコードを生成します。-drain
では、objc_autoreleasePoolPush()
およびobjc_autoreleasePoolPop()
関数は本当に ARC を有効にして呼び出す必要があるのでしょうか? はいの場合、どのコンパイラ オプションが欠落していますか?