macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSDictionaryのキー

NSDictionaryのキーってidなんだけれど、NSString以外でもOKなんだ。要はisEqual:送ってYESならキーとして成り立つ。
で、やってみた。

#pragma mark NSDictionary key
-(void)method007
{
    //NSDictionaryを作成
    NSDictionary *keyDictionary = [NSDictionary dictionaryWithObjectsAndKeys:[NSNull null],@"key1",@"bbb",@"key2",@"ccc",@"key3", nil];
    NSString *str = [NSString stringWithString:@"aaa"];
    NSDictionary *aDictionary = [NSDictionary dictionaryWithObject:str forKey:keyDictionary];
    NSLog(@"%s aDictionary %p = %@",__FUNCTION__,aDictionary,[aDictionary description]);
    //=>-[OOOAppDelegate method007] aDictionary 0x6b574d0 = {{key1 = "<null>";key2 = bbb;key3 = ccc;} = aaa;}

    
    NSLog(@"%s str %p = %@",__FUNCTION__,str,str);
    NSLog(@"%s str %p = %@",__FUNCTION__,[aDictionary objectForKey:keyDictionary],[aDictionary objectForKey:keyDictionary]);
    //-[OOOAppDelegate method007] str 0x463c = aaa
    //-[OOOAppDelegate method007] str 0x463c = aaa
}

ああ、大丈夫みたい。
NSDictionaryがNSDictionaryのキーになる。全く意味ないけど。