/ / Wyjaśnienie dotyczące zarządzania pamięcią telefonu iPhone (autorelease) - iPhone, zarządzanie pamięcią, autorelease

Wyjaśnienie dotyczące zarządzania pamięcią IPhone (autorelease) - iphone, zarządzanie pamięcią, autorelease

Wiem, że na podobne pytanie już udzielono odpowiedzi tutaj, ale chcę się upewnić, że rozumiem to trochę lepiej. Oto mój scenariusz ...

Mam metodę klasy pomocniczej, która zwraca przydzielony UIImageView, jak pokazano poniżej.

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

}

Następnie w jednej z moich metod UIViewController używam go jako takiego ..

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

Moje pytanie dotyczy tego, jak wygląda ta pamięćwydany. Nie używam puli autorelease (innej niż utworzona przez aplikację), a zmienna nie jest iVar / Property (więc nie zostanie zwolniona po wywołaniu dealloc). W tym przypadku jestem odpowiedzialny za zwolnienie pamięci po Nazwałem to? Kiedy zaczyna się automatyczne wydawanie? Dziękujemy za pomoc!

Odpowiedzi:

1 dla odpowiedzi № 1

Połączenie z autorelease spowoduje release do wysłania do obiektu następnym razem za pośrednictwem pętli zdarzeń. To będzie uwzględniać alloc zadzwonię do ciebie tableCellButton. Jedyny raz obiekt jest zatrzymany w środku addSubview, który również sobie poradzi release tego samego obiektu. Na podstawie powyższego kodu zarządzanie pamięcią tego obiektu jest sprawdzane.


1 dla odpowiedzi nr 2

Każda iteracja runloop ma własną pulę autorelease.

Zasadniczo pomyśl o tym w ten sposób:

while(1)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[someObject doSomething];
[pool drain];
}