`язык autoreleasePoolPush () " и "язык autoreleasePoolPop (функций)" и " блоки@autoreleasepool`
Я где-то читал, что при использовании блоков @autoreleasepool { } с включенной дугой компилятор генерирует код для получения функций objc_autoreleasePoolPush() и objc_autoreleasePoolPop(), вызываемых в начале и в конце блока соответственно.
@autoreleasepool, эти две функции не вызываются, даже с -fobjc-arc. Вместо этого компилятор генерирует код для выделения нового объекта NSAutoreleasePool (с чем-то эквивалентным [[NSAutoreleasePool alloc] init]) в начале и для слива пула (с -drain звонок) в конце квартала.
Итак, действительно ли функции objc_autoreleasePoolPush() и objc_autoreleasePoolPop() должны вызываться с включенной дугой? Если да, то какие параметры компилятора отсутствуют?
2 ответа:
Какова ваша цель развертывания? Это может быть OSX 10.8/iOS 6, чтобы получить новый способ делать вещи.
objc_autoreleasePoolPush()иobjc_autoreleasePoolPop()действительно предполагается вызывать в начале и в и блока@autoreleasepool, соответственно, из кода, генерируемого компилятором, начиная с OSX 10.7/ iOS 5.0. Отсутствует параметр компилятора-fobjc-runtime=macosx-10.7.И, кстати, ARC не имеет ко всему этому никакого отношения, так что блоки
@autoreleasepoolзаставляют компилятор генерировать вызовы этих двух функций даже при выключенной ARC.