NSArray и NSMutableArray могут содержать только объекты Objective-C, поэтому вы не можете хранить в них структуры. Если содержимое должно быть структурным и вам нужно что-то похожее на NSArray, используйте NSPointerArray , доступный в 10.5 и более поздних версиях.
Вы можете хранить указатели на объекты Objective-C (например, NSPointerArray*
или id
) внутри структуры, как и любой другой тип указателя. Например, вы можете объявить структуру для двусвязного узла списка, в котором хранится объект Objective-C, например:
typedef struct DoublyLinkedListNode {
id object;
__strong struct DoublyLinkedListNode *next;
__strong struct DoublyLinkedListNode *prev;
} DoublyLinkedListNode;
Атрибут __strong
используется в связи с сборкой мусора в Objective-C 2.0, так как указатели на объекты Objective-C действуют как надежные ссылки, а типы указателей на C по умолчанию этого не делают. Таким образом, если на один узел в списке ссылаются из ссылки __strong, список не исчезнет. (Подробнее см. Руководство по программированию сборки мусора , и особенно вторую половину Использование Core Foundation с сборкой мусора .) Возможно, вы захотите рассмотреть возможность это для твоих структур.
Что касается вашего желаемого синтаксиса, я, возможно, не полностью понял ваш вопрос, но вы не сможете использовать скобочный синтаксис для доступа к объектам в коллекциях Какао, таких как NSPointerArray. (Кроме того, скорее всего, вам придется использовать оператор "->
" вместо ".
" для структур, так как они, вероятно, будут размещены в куче. Все объекты Objective-C должны быть, и Я предполагаю, что вы захотите хранить эти структуры вне локальной области видимости метода.)
Поскольку Objective-C не имеет обобщений, вы также не можете "реализовать [NS] NSMutableArray типа struct". Фактически, один из ваших предыдущих вопросов SO содержит более подробную информацию по этому вопросу. Если это не то, что вы имели в виду, не стесняйтесь уточнять.