Biorąc pod uwagę dwa scenariusze, który kod jest najlepszą praktyką i dlaczego?Autorelease vs. Release
autorelease
loginButton = [[[UIBarButtonItem alloc] initWithTitle:@"Login"
style:UIBarButtonItemStylePlain
target:self
action:@selector(loginButtonClicked:)]
autorelease];
self.navigationItem.rightBarButtonItem = loginButton;
lub
Release
loginButton = [[UIBarButtonItem alloc] initWithTitle:@"Login"
style:UIBarButtonItemStylePlain
target:self
action:@selector(loginButtonClicked:)];
self.navigationItem.rightBarButtonItem = loginButton;
[loginButton release];
Na słabym urządzeniu pamięciowym, takim jak iPhone, lepiej jest jawnie zwolnić, jeśli to możliwe. Ułatwia także debugowanie dziwnych błędów EXC_BAD_ACCESS, ponieważ jednoznaczne wydanie oznacza, że kontrolujesz długość życia obiektu. –
@Alex, w tym przypadku dosłownie nie robi różnicy - obiekt jest zatrzymywany natychmiast po utworzeniu. Wszystko, co się wydarzy, to liczba referencyjna zostanie zmniejszona o jeden ... kogo to obchodzi, jeśli stanie się to natychmiast lub później? –
Nie ma znaczenia, tylko jeśli nigdy nie zmienisz self.navigationItem.rightBarButtonItem przed zwolnieniem puli autorelease. – JeremyP