関数のオブジェクトの呼び出しを追跡するNSDictionaryを作成しようとしています。何も知らずに、オブジェクトごとに一意の文字列を作成したいと思います。私の最初の考えは、オブジェクトのポインタのメモリアドレスを使用することですが、その方法がわかりません。
何かご意見は?辞書のキーとして、NSObjectからのある種の一意のIDを使用する必要があります。
関数のオブジェクトの呼び出しを追跡するNSDictionaryを作成しようとしています。何も知らずに、オブジェクトごとに一意の文字列を作成したいと思います。私の最初の考えは、オブジェクトのポインタのメモリアドレスを使用することですが、その方法がわかりません。
何かご意見は?辞書のキーとして、NSObjectからのある種の一意のIDを使用する必要があります。
アプリケーションがiOS6をサポートしている場合は、NSDictionaryOfVariableBindings
マクロのみを確認してください。
コードは次のようになります:
// Create the dictionary
NSObject *firstObject = [NSString stringWithString:@"My first item"];
NSObject *secondObject = @"[@"an", @"array", @"of", @"strings"]";
NSDictionary *theDic = NSDictionaryOfVariableBindings(firstObject, secondObject);
// Access data
NSString *singleString = [theDic objectForKey:@"firstObject"];
NSArray *listOfStrings = [theDic objectForKey:@"secondObject"];
私の提案は辞書を使わないことです。それらを配列に配置する場合、自動生成された一意のキー(インデックス)を備えた辞書と考えることができます。それはまさにあなたが説明していることです。何らかの理由で辞書を使用する必要がある場合は、私が話しているのと同じモデルを実装することをお勧めしますが、キーを生成して維持する必要があります。
あなたの解決策は最善のアプローチではないように思われることに同意しますが-hash
、NSObject
プロトコルで検討しましたか?すべてNSObjects
が1つを返す必要があります。これはハッシュであることに注意してください。そのため、2つの異なるオブジェクトが同じハッシュを持つ可能性があります。
NSObject
コレクションが実装するカテゴリを検討することもできます。カテゴリは、キーとして使用するUUIDを生成できます。