1

次の方法では、配列の1つを解放すると例外が発生する理由がわかりません。私が見ることができた唯一の理由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
}

アレイが自動解放されているかどうかを誰かが確認できますか?もしそうなら、どうすれば知ることができますか/なぜ知る必要がありますか?
オブジェクトのいずれかのインスタンスがコードによって自動解放されているかどうかを確認することは可能ですか?

4

3 に答える 3

12

はい、メソッドの名前は次のとおりです。

  • で始まらないnew
  • で始まらないalloc
  • ではありませんretain
  • 含まれていませんcopy

これは一般に「NARC」ルールとして知られており、ここで完全に説明されています:http: //developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc / uid / 20000043-SW1

于 2010-11-25T06:05:10.757 に答える
-1

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

于 2010-11-25T06:01:24.053 に答える
-1

慣例により、名前にinitまたはcopyが含まれるすべてのメソッドは、自動解放されていないオブジェクトを返します。

于 2010-11-25T06:01:46.643 に答える