次の方法では、配列の1つを解放すると例外が発生する理由がわかりません。私が見ることができる唯一の理由は、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'は新しいメモリを割り当てません。しかし、これらのすべての場合、あなたは記憶を持ち、それを放棄しなければなりません。 –