Каково различие между выпуском и автовыпуском?

Я все еще имею, некоторые неясные понимают о выпуске и автовыпуске. Каково различие между ними обоими? У меня есть этот код. Для соединения Facebook. Я разрушаю его иногда, когда я перехожу к входу в систему Facebook, я сомневающийся, возможно, что это - потому что я не выпускаю объект приятно.? Спасибо за любого помогает

if (_session.isConnected) {
        [_session logout];
    } else {
        FBLoginDialog* dialog = [[[FBLoginDialog alloc] initWithSession:_session] autorelease];
        [dialog show];
    }
11
задан zoul 14 February 2011 в 08:05
поделиться

3 ответа

Руководство по программированию управления памятью для какао скоро будет вашим лучшим другом. Вкратце, объектные экземпляры в 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

}
22
ответ дан 3 December 2019 в 01:39
поделиться

Фоновое обсуждение:

Objective-C Подсчитается, поэтому объекты удаляются, когда ссылочный счетчик достигает 0. Выпуск снижает справку осредатений немедленно, Autorelease уменьшает его, когда авторелеизменное пул появляется

, когда Использование:

Используйте авторелез при выделении объекта, если

  • вам не нужен его после текущей функции
  • , он будет сфотографирован некоторыми другими objet / fuction и будет выпущен на более позднее удерживающего кода
  • Когда логика текущей функции сложно, поэтому вам придется отправлять выпуск в десятую различные места, прежде чем выполнять возврат

, используйте «ручной» выпуск

  • , чтобы вернуть предыдущий сохранение (если вы реализуете Библиотека)
  • Если вам нужно точное управление объектами освобождения (например, они используют много памяти или пул автореляции не будут выскочины в течение некоторого времени)

, но действительно мой FreeAnd:

Эрик

4
ответ дан 3 December 2019 в 01:39
поделиться

Согласно руководству по программированию по управлению памятью для какао :

Autorelease метод, определенный Nsobject, отмечает приемник на потом выпускать. Авторелизы А.Н. объект - то есть, отправляя ему Autorelease Message - вы заявляете, что Вы не хотите владеть объектом за пределами объема, в котором вы отправили Автокресла.

также:

Метод Autorelease, таким образом, позволяет каждый объект для использования других объектов не беспокоясь о утилизации их.

3
ответ дан 3 December 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: