Если вы храните большую коллекцию 32-битных целых чисел, рассмотрите возможность использования соответствующего типа коллекции CF, а не типа коллекции NS. Это позволяет передавать пользовательские методы хранения, что избавляет от необходимости помещать в ячейку каждое целое число, добавленное в коллекцию.
Например, допустим, вы хотите получить массив из 32-битных целых чисел. Использование:
CFMutableArrayRef arrayRef = CFArrayCreateMutable(kCFAllocatorDefault, 0, NULL);
Последний параметр указывает массиву не сохранять / освобождать «адреса», которые вы передаете ему. Поэтому, когда вы делаете что-то вроде этого:
CFArrayAppendValue(arrayRef, 1);
Массив считает, что вы передаете указатель на объект, живущий по адресу памяти 0x1. Но поскольку вы сказали, чтобы он не вызывал retain / release для этого указателя, он обрабатывается коллекцией как стандартное int.
FWIW, для образовательной ценности стандартные NSMutableArrays имеют эквивалентные типы CF. Благодаря бесплатному мостовому соединению вы можете использовать коллекцию CF как стандартную коллекцию Foundation:
CFMutableArrayRef arrayRef = CFArrayCreateMutable(kCFAllocatorDefault, 0, kCFTypeArrayCallbacks);
NSMutableArray *array = (NSMutableArray *)arrayRef;
[array addObject:@"hi there!"];
NSLog(@"%@", [array objectAtIndex:0]); // prints "hi there!"
Вы можете применять те же приемы к словарям (с CFDictionary / CFMutableDictionary), наборам (CFSet / CFMutableSet) и т. Д.