Objective -C ARC и передача массивов объектов C

Извините, если это немного C -нуб вопрос :Я знаю, что мне нужно проверить свои указатели. К сожалению, у меня крайний срок, поэтому у меня нет времени проработать целую главу книги, поэтому я надеюсь на немного более конкретный совет.

Я хочу сохранить некоторые объективные -объекты C в массиве C. Я использую АРК. Если бы я был на Mac, я мог бы вместо этого использовать NSPointerArray, но я на iOS, и это недоступно.

Я буду хранить трехмерный -массив C :концептуально моими измерениями являются день, высота и номер кеша. Каждый элемент будет либо указателем на объект -C, либо NULL.

Количество кэшей (, т. е. размер измерения cacheNumber ), известен во время компиляции, но два других неизвестны.Кроме того, массив может быть очень большим, поэтому мне нужно динамически выделять для него память.

Что касается семантики владения, мне нужны сильные ссылки на объекты.

Я хотел бы, чтобы весь трехмерный -массив был переменной экземпляра в целевом -C-объекте.

Я планирую использовать метод - tableForCacheNumber:(int)num days:(int*)days height:(int*)height. Этот метод должен возвращать двумерный -массив, то есть один конкретный номер кеша. (Он также возвращает по ссылке размер возвращаемого массива.)

Мои вопросы:

  • В каком порядке я должен расположить свои измерения, чтобы я мог легко вернуть указатель на подмассив для одного определенного номера кеша? (Я думаю, что это должно быть первым, но я не на 100%.)

  • Каким должен быть возвращаемый тип моего метода, чтобы ARC не жаловался? Меня не волнует, имеет ли возвращаемый массив увеличенное количество ссылок или нет, если я знаю, что он делает.

  • Какого типа должна быть моя переменная экземпляра, содержащая трехмерный массив? Я думаю, что это должен быть просто указатель, так как этот ivar просто представляет указатель на первый элемент в моем массиве. Правильный? Если да, то как мне это указать?

  • Когда я создаю трехмерный -массив (для своего ivar ), я думаю, я делаю что-то вроде calloc(X * Y * Z, sizeof(id))и привожу результат к типу для моего ivar?

  • При доступе к элементам из трехмерного -массива в ivar я полагаю, что мне нужно каждый раз разыменовывать указатель с чем-то вроде (*myArray)[4][7][2]. Правильный?

  • Будет ли доступ к двухмерному -массиву, который я возвращаю из метода, будет аналогичным?

  • Нужно ли помечать возвращенный двухмерный массив -тегом objc_returns_inner_pointer?

Я еще раз прошу прощения за то, что это немного плохой вопрос о переполнении стека (он слишком длинный и содержит слишком много частей ). Я надеюсь, что граждане SO меня простят. Чтобы улучшить свою межсетевую карму, возможно, я напишу об этом в блоге, когда этот проект будет готов.

8
задан Brad Larson 29 March 2012 в 23:17
поделиться