2010-11-25 9 views
0

次の方法では、配列の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

メモリを特別に割り当てないかぎり、システムメソッドは自動解放されたメソッドを返します。

+0

-1 false。 "malloc"は特にメモリを割り当てています。 'copy'は新しいオブジェクトを返すことは保証されていません。 'retain'は新しいメモリを割り当てません。しかし、これらのすべての場合、あなたは記憶を持ち、それを放棄しなければなりません。 –

-1

慣例では、名前にinitまたはcopyを持つすべてのメソッドは、オートレリースされていないオブジェクトを返します。

+0

-1 false。これは、 'init'メソッドではなく、所有オブジェクトを返す' alloc'メソッドです。 –

関連する問題