Да и нет. Вы закончили бы тем, что освободили строковую память, но "пропустить" объект NSAutoreleasePool в память при помощи дренажа вместо выпуска при выполнении этого под собравшим "мусор" (не управляемая память) среда. Эта "утечка" просто делает экземпляр NSAutoreleasePool "недостижимым" как любой другой объект без сильных указателей под GC, и объект был бы очищен в следующий раз выполнения GC, которые могли очень хорошо быть непосредственно после вызова к -drain
:
дренаж
В собравшей "мусор" среде, триггерная сборка "мусора", если память выделила начиная с последнего набора, больше, чем текущий порог; иначе ведет себя как выпуск.... В собравшей "мусор" среде этот метод в конечном счете звонит
objc_collect_if_needed
.
Иначе, это подобно тому, как -release
ведет себя под неGC, да. Как другие заявили, -release
не под GC, таким образом, единственный способ удостовериться пул функционирует правильно под GC, до -drain
, и -drain
при работах неGC точно как -release
под неGC, и возможно передает его функциональность более ясно также.
я должен указать, что Ваш оператор "что-либо позвонившее с новым, выделением или init" не должен включать "init" (но должен включать "копию"), потому что "init" не выделяет память, это только настраивает объект (вид конструктора). При получении объекта alloc'd и функции, только вызванной init как таковой Вы не выпустили бы ее:
- (void)func:(NSObject*)allocd_but_not_init
{
[allocd_but_not_init init];
}
, Который больше не использует память, чем он, Вы уже запустили с (принимающий init, не инстанцирует объектов, но Вы не ответственны за тех так или иначе).
Словарь, который Apple предоставляет в OS X, лицензирован одним из основные издатели. По закону они не могут позволить вам выгрузить весь список слов.