Я все еще имею, некоторые неясные понимают о выпуске и автовыпуске. Каково различие между ними обоими? У меня есть этот код. Для соединения Facebook. Я разрушаю его иногда, когда я перехожу к входу в систему Facebook, я сомневающийся, возможно, что это - потому что я не выпускаю объект приятно.? Спасибо за любого помогает
if (_session.isConnected) {
[_session logout];
} else {
FBLoginDialog* dialog = [[[FBLoginDialog alloc] initWithSession:_session] autorelease];
[dialog show];
}
Руководство по программированию управления памятью для какао скоро будет вашим лучшим другом. Вкратце, объектные экземпляры в Cocoa управляются памятью, используя счетную ссылку (если, конечно, вы используете сборку мусора на OS X). Объект указывает на то, что он хочет «сохранить» интерес собственности в другой экземпляр - сохранить его от того, чтобы отказаться от того, что отправив его -RETAIN
сообщение. Объект указывает на то, что он хочет освободить этот интерес, отправив другой экземпляр A сообщение орешения
. Если количество объектов, которые имеют «сохраненные» и интерес собственности в объекте, падают до 0 (т. Е. Когда последние из собственных экземпляров отправляет сообщение -Release
сообщение), экземпляр с укомплектованием удержания 0 Отказ
Иногда удобно сказать: «Я хочу, чтобы этот экземпляр был выпущен некоторое время в будущем ». Это цель -урезереесть
. Отправка сообщения -autionelease
-Atorelease Добавляет приемник к текущему NSAUTRELEASEPOOL
. Когда этот пул сливается, он отправляет сообщение -Release
для всех экземпляров в бассейне. NSAUTREAREASEPOOL
автоматически создается в начале каждой итерации циклов выполнения каждого потока и истощена в конце этой итерации. Таким образом, вы можете сделать что-то подобное в способе:
- (id)myMethod {
return [[[MyObject alloc] init] autorelease];
}
абоненты этого метода вернется экземпляром, что они могут -RETAIN
, если они хотят его сохранить. Если они не сохранят его, он не будет придерживаться, по крайней мере, пока не сливается, пока не сливается ограждение авторелезга:
- (void)someOtherMethod {
...
id instance = [obj myMethod];
... // do more with instance, knowing that it won't be dealloc'd until after someOtherMethod returns
}
Фоновое обсуждение:
Objective-C Подсчитается, поэтому объекты удаляются, когда ссылочный счетчик достигает 0. Выпуск снижает справку осредатений немедленно, Autorelease уменьшает его, когда авторелеизменное пул появляется
, когда Использование:
Используйте авторелез при выделении объекта, если
, используйте «ручной» выпуск
, но действительно мой FreeAnd:
Эрик
Согласно руководству по программированию по управлению памятью для какао :
Autorelease метод, определенный Nsobject, отмечает приемник на потом выпускать. Авторелизы А.Н. объект - то есть, отправляя ему Autorelease Message - вы заявляете, что Вы не хотите владеть объектом за пределами объема, в котором вы отправили Автокресла.
также:
Метод Autorelease, таким образом, позволяет каждый объект для использования других объектов не беспокоясь о утилизации их.