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