Я где-то читал, что, когда мы используем @autoreleasepool { }
блоки с ARC включена, компилятор генерирует код, чтобы получить objc_autoreleasePoolPush()
и objc_autoreleasePoolPop()
функции, вызываемые в начале и в конце блока, соответственно.`objc_autoreleasePoolPush()` и `objc_autoreleasePoolPop()` функции и `@ autoreleasepool` блоки
Однако, когда я компилирую файл Objective-C с блоками @autoreleasepool
, эти две функции не вызываются, даже с -fobjc-arc
. Вместо этого компилятор генерирует код для размещения нового объекта NSAutoreleasePool
(с чем-то эквивалентным [[NSAutoreleasePool alloc] init]
) в начале и для слива пула (с вызовом -drain
) в конце блока.
Значит, функции objc_autoreleasePoolPush()
и objc_autoreleasePoolPop()
действительно должны быть вызваны с поддержкой ARC? Если да, то какие параметры компилятора отсутствуют?
Включен ли ARC, не имеет значения. Блок '@autoreleasepool {}' скомпилирован в 'objc_autoreleasePoolPush()' и 'objc_autoreleasePoolPop()' независимо от ARC. – newacct
@newacct Да, вы абсолютно правы. – LuisABOL