Разъяснение по управлению памятью IPhone (авто-релиз) - PullRequest
1 голос
/ 23 ноября 2010

Я знаю, что на подобный вопрос уже был дан ответ здесь , но я просто хочу убедиться, что понимаю его немного лучше.Вот мой сценарий ...

У меня есть метод вспомогательного класса, который возвращает выделенный UIImageView, как показано ниже.

+(UIImageView *)tableCellButton{
 return [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]] autorelease];

}

Затем в одномиз моих методов UIViewController я использую его как таковой ..

UIImageView *imageView = [Helper tableCellButton];
imageView.frame = cell.backgroundView.bounds;
imageView.tag = 250;
[cell.backgroundView addSubview:imageView];

Мой вопрос касается того, как освободить эту память.Я не использую пул автоматического выпуска (кроме созданного приложения), и эта переменная не является iVar / Property (поэтому она не будет освобождена при вызове dealloc).В этом случае я ответственен за освобождение памяти после того, как я назвал это?Когда в игру вступает авто-релиз?Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Каждая итерация runloop имеет собственный пул авто-релиза.

По сути, думайте об этом так:

while(1)
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    [someObject doSomething];
    [pool drain];
}
1 голос
/ 23 ноября 2010

Вызов autorelease приведет к отправке release объекту в следующий раз через цикл обработки событий. Это будет учитывать alloc звонок, который вы делаете в tableCellButton. Единственный раз, когда объект удерживается, находится внутри addSubview, который также будет обрабатывать свои собственные release того же объекта. Основываясь на приведенном выше коде, вы проверяете управление памятью этого объекта.

...