Вместо этого вы можете создать CFMutableArray
, который может обрабатывать массивы произвольных объектов, и вы можете использовать его как NSMutableArray
(по большей части).
// create the array
NSMutableArray *lstPack = (NSMutableArray *) CFArrayCreateMutable(NULL, 0, NULL);
// add an item
[lstPack addObject:pack];
// get an item
Pack *anObject = (Pack *) [lstPack objectAtIndex:0];
// don't forget to release
// (because we obtained it from a function with "Create" in its name)
[lstPack release];
Параметры дляCFArrayCreateMutable
:
- Распределитель, используемый для массива.Предоставление
NULL
здесь означает использование распределителя по умолчанию. - Ограничение на размер массива.0 означает отсутствие ограничения, любое другое целое число означает, что массив создается только для того, чтобы содержать ровно столько элементов или меньше.
- Последний параметр - это указатель на структуру, содержащую указатели на функции.Более подробную информацию можно найти здесь .Предоставляя
NULL
здесь, это означает, что вы не хотите, чтобы массив что-либо делал со значениями, которые вы ему задали.Обычно для NSMutableArray
это будут retain
объекты, которые к нему добавляются, и release
объекты, которые удаляются из него¹, но CFMutableArray
, созданный без обратных вызовов, не будет этого делать.
¹ Причина, по которой ваш код дает сбой, состоит в том, что NSMutableArray
пытается отправить retain
в вашу Pack
структуру, но, конечно, это не объект Objective-C, поэтому он бомбит.