4

(ネットで調べてもわかりません)

すべてのコードは 1 つのオブジェクト内にあります。.h ファイルで、NSMutableArray を定義します。そして、私はそれをinitに割り当てます。

-(id)init{
    self = [super init];
    if(self) {
        definitionArray=[[NSMutableArray alloc] init];
        [self initialLoadDefinitionData];

        if([definitionArray isKindOfClass:[NSMutableArray class]]) {
           NSLog(@"Array is Mutable");
        } else {
           NSLog(@"Array is Not Mutable");
        }

    }
    return self;
}

NSUserDefaults の値に基づいて初期化したいので、init から別の関数を呼び出します。これは initialLoadDefinitionData:theCollection と呼ばれ、非常に基本的なものです。

-(void)loadDefinitionData{
    definitionArray=[[[NSUserDefaults standardUserDefaults] objectForKey:@"SOMEKEY"] mutableCopy];
}

デバッグ目的で、init 関数に isKindOfClass を追加しました。これの面白いところは、NSUserDefaults からデータを取得できる場合に、この IF ステートメントが MUTABLE を返すことです。ただし、@"SOMEKEY" が使用できない場合、objectForKey は nil を返し、definitionArray は突然 IMMUTABLE になります。mutableCopy が指定されている場合でも。

したがって、私の結論は、objectForKey がオブジェクトを見つけられない場合、戻り値は MUTABLE ではないということです。この結論は正しいですか?または、MutableCopy は、Nil で可変としてオブジェクトをアドレス指定できませんか?

4

1 に答える 1

3

いいえ、あなたの結論は正しくありません。objectForKeyが返されnilた場合は、もちろん返されるmutableCopyメッセージを送信しているため(ObjC で送信されたすべてのメッセージは を返します)、そのため、その部分が表示されています。(この時点ではインスタンスさえないため、メッセージは誤解を招きます)。nilnilnilnilelseArray is Not MutableNSArray

于 2012-11-28T16:16:03.800 に答える