2010-11-25 8 views
0

다음 방법에서 배열 중 하나를 해제하면 예외가 발생하는 이유가 확실하지 않습니다. 내가 볼 수있는 유일한 이유는 componentsSeparatedByString이 자동 레이아웃 된 배열을 반환하지만 문서에 언급 된 내용을 볼 수 없다는 것입니다.NSString componentsSeparatedByString : 자동 배열 된 배열을 반환합니까?

-(void)addRow:(NSString *)stringWithNumbers; 
{ 

    NSArray *numbers = [stringWithNumbers componentsSeparatedByString:@" "]; 
    NSMutableArray *row = [[NSMutableArray alloc] initWithCapacity:[numbers count]]; 
    for (NSString *number in numbers) { 
     Number *n = [[Number alloc] initWithNumber:number]; 
     [row addObject:n]; 
     [n release]; 
    } 
    [rows addObject:row]; 
    [row release]; 
// [numbers release]; <-- leads to exception 
} 

어레이가 자동 릴리즈되는 경우 누구도 확인할 수 있습니까? 그렇다면 어떻게 알 수 있습니까? 왜 제가 알았습니까?
개체의 인스턴스 하나가 코드에 의해 자동 리 릴리스 되었는 지 확인할 수 있습니까?

답변

-1

메모리를 특별히 할당하지 않으면 시스템 방법을 통해 자동 복구 된 메소드가 다시 제공됩니다.

+0

-1 false. "malloc"은 특별히 메모리를 할당합니다. 'copy'는 새로운 객체를 리턴하는 것이 보장되지 않습니다. 'retain'은 새로운 메모리를 할당하지 않습니다. 그러나이 모든 경우에, 당신은 기억을 소유하고 그것을 포기해야합니다. –

-1

규칙에 따라 이름에 init 또는 copy가있는 모든 메소드는 자동 다시 실행되지 않는 객체를 반환합니다.

+0

-1 false. 'alloc' 메쏘드가 아니라 소유 된 객체를 반환하는'alloc' 메쏘드입니다. –

관련 문제