それが本当にボトルネックである場合は、NSMutableDictionary の代わりに基礎となる CFDictionaryRef を使用して、整数を NSNumber 値でボックス化する代わりに直接格納する辞書を作成できます。
詳細については、 CFDictionaryCreateMutable および CFDictionaryValueCallBacks のドキュメントを参照してください。ただし、基本的な考え方は、retain と release は何も行わず、説明はオンザフライで NSNumber を生成し (または単に stringWithFormat:"%d" を実行します)、equal は int を比較するというものです。直接。
コードのトリッキーな部分を示すサンプルを次に示します。
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
CFStringRef intdesc(const void *value) {
int i = (int)value;
CFNumberRef n = CFNumberCreate(NULL, kCFNumberIntType, &i);
CFStringRef s = CFCopyDescription(n);
CFRelease(n);
return s;
}
Boolean inteq(const void *value1, const void *value2) {
int i1 = (int)value1, i2 = (int)value2;
return i1 == i2;
}
int main(int argc, char *argv[]) {
CFDictionaryValueCallBacks cb = { 0, NULL, NULL, &intdesc, &inteq };
CFMutableDictionaryRef d =
CFDictionaryCreateMutable(NULL,
0,
&kCFTypeDictionaryKeyCallBacks,
&cb);
CFDictionarySetValue(d, @"Key1", (void *)1);
CFDictionarySetValue(d, @"Key2", (void *)2);
CFStringRef s = CFCopyDescription(d);
NSLog(@"%@", s);
CFRelease(s);
CFRelease(d);
return 0;
}
これをたくさん行う場合は、おそらく ObjC でまとめる必要がありますが (特に ARC を使用している場合)、これは読者の演習として残します。