다음 방법에서 배열 중 하나를 해제하면 예외가 발생하는 이유가 확실하지 않습니다. 내가 볼 수있는 유일한 이유는 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 false. "malloc"은 특별히 메모리를 할당합니다. 'copy'는 새로운 객체를 리턴하는 것이 보장되지 않습니다. 'retain'은 새로운 메모리를 할당하지 않습니다. 그러나이 모든 경우에, 당신은 기억을 소유하고 그것을 포기해야합니다. –