iPhone에서 NSString을 출시 할 때
-
03-07-2019 - |
문제
다음 방법이 있습니다
-(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;
}
APAI를 공개하지 않습니다. 그렇다면 응용 프로그램이 충돌하기 때문입니다. 나는 그것을 사용한 후 어딘가에 출시 해야하는지 여부를 알 수 없으며, 그렇다면 어떻게해야합니까? nsmutablearray를 풀어주십시오. 충분합니까? 아니면 각 객체를 가로 지르고 방출해야합니까?
그리고 내가 그것을 석방 할 필요가 없다면, 누가 공개 할 책임이 있습니까?
해결책
Epatel이 말했듯이, 당신은 그 특정 문자열을 공개 할 필요가 없습니다. 더 적극적으로 원한다면 대신 이것을 할 수 있습니다.
-(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;
}
요약해서 말하자면:
[nsstring alloc] Initwith ...] -> 릴리스 또는 자동 제출.
nsstring stringwith ...] -> 릴리스 할 필요가 없습니다.
- 편집 : 추가 autorelease
반환 할 때 페이즈를 위해. 객체를 반환 할 때는 항상 Alloc & Init'ted가 있으면 자동 조정하십시오.
다른 팁
stringWithUTF8String:
다음 EventLoop에서 Cocoa에 의해 자동으로 릴리스되는 AutoreLease 문자열을 반환합니다. 그러나 스트링은 당신이 할 때 배열에도 유지됩니다. addObject:
... 배열에있는 한 유지됩니다.
제휴하지 않습니다 StackOverflow