문제

다음 방법이 있습니다

   -(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:... 배열에있는 한 유지됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top