Si vous stockez une grande collection d'entiers 32 bits, pensez à utiliser le type de collection CF approprié plutôt que le type de collection NS. Ils vous permettent de transmettre des méthodes de conservation personnalisées, ce qui élimine le besoin de mettre en boîte chaque entier ajouté à la collection. Par exemple, supposons que vous vouliez un tableau de nombres entiers de 32 bits. Par exemple, disons que vous voulez un tableau d'entiers 32 bits. Utilisation:
CFMutableArrayRef arrayRef = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
Le dernier paramètre indique au tableau de ne pas conserver/libérer les "adresses" que vous lui transmettez. Alors, quand vous faites quelque chose comme ceci:
CFArrayAppendValue(arrayRef, 1);
Qu'est-ce que le tableau pense est que vous passez dans un pointeur vers un objet vivant à l'adresse de mémoire 0x1.Mais puisque vous lui avez dit de ne pas appeler retain/release sur ce pointeur, il est traité comme un int standard par la collection. FWIW, pour une valeur éducative, standard NSMutableArrays ont des types CF équivalents. Grâce à pontage sans frais, vous pouvez utiliser la collection CF comme une collection standard Fondation:
CFMutableArrayRef arrayRef = CFArrayCreateMutable(kCFAllocatorDefault, 0, kCFTypeArrayCallbacks);
NSMutableArray *array = (NSMutableArray *)arrayRef;
[array addObject:@"hi there!"];
NSLog(@"%@", [array objectAtIndex:0]); // prints "hi there!"
Vous pouvez appliquer les mêmes astuces pour les dictionnaires (avec CFDictionary/CFMutableDictionary), jeux (cfset/CFMutableSet), etc.