Kiedy wypuścić NSString na iPhone'a


Mam następującą metodę
-(NSMutableArray *) getPaises {
NSMutableArray * paises;
paises = [[NSMutableArray alloc] init];
while( get new row ) {
NSString *aPais = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
[paises addObject:aPais];
}
return paises;
}

Nie zwalniam aPais, ponieważ jeśli to zrobię, aplikacja ulegnie awarii. Nie wiem, kiedy i czy powinienem go gdzieś wypuścić po użyciu, a jeśli tak, to jak to zrobię. Czy wystarczy po prostu zwolnić NSMutableArray? A może powinienem go przejść i uwolnić każdy przedmiot?
A jeśli nie powinienem go wypuszczać, kto jest za to odpowiedzialny?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jak powiedział Emapator, nie musisz uwalniać tego konkretnego ciągu. Jeśli chcesz być bardziej aktywny, możesz to zrobić zamiast tego:
-(NSMutableArray *) getPaises {
NSMutableArray * paises;
paises = [[[NSMutableArray alloc] init] autorelease];
while( get new row ) {
NSString *aPais = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
[paises addObject:aPais];
[aPais release];
}
return paises;
}

W podsumowaniu:
  • [[NSString z ciągiem alokacji] initWith ...] - & > wymagane wydanie lub autorelease.
  • [NSString stringWith ...] - & > nie ma potrzeby zwalniania.

- Edycja: Dodano
autorelease
dla paisów, ponieważ go zwracasz. Kiedy zwracasz obiekt, zawsze implementuj go automatycznie, jeśli masz przydzieloną & amp; init.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

stringWithUTF8String:
zwraca ciąg autorelease, który zostanie automatycznie zwolniony przez Cocoa w następnym eventloop. Ale ciąg jest również przechowywany w tablicy, gdy
addObject:
... tak długo, jak znajduje się w tablicy, będzie przechowywany.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się