Objective-C ARC и прохождение C массивов объектов
Извините, если это что-то вроде вопроса C-noob: я знаю, что мне нужно навести указатели. К сожалению, у меня крайний срок, поэтому у меня нет времени, чтобы проработать целую главу книги, поэтому я надеюсь получить более точный совет.
Я хочу хранить некоторые объекты Objective C в массиве C. Я использую ARC. Если бы я был на Mac, я мог бы использовать вместо этого NSPointerArray, но я на iOS, и это не доступно.
Я буду хранить трехмерный массив C: концептуально мои измерения - это день, высота и cacheNumber. Каждый элемент будет либо указателем на объект target-C, либо NULL.
Количество кэшей (то есть размер измерения cacheNumber) известно во время компиляции, но два других не известны. Кроме того, массив может быть очень большим, поэтому мне нужно динамически выделять для него память.
Что касается семантики владения, мне нужны сильные ссылки на объекты.
Я хотел бы, чтобы весь трехмерный массив был переменной экземпляра объекта object-C.
Я планирую иметь метод, который- tableForCacheNumber:(int)num days:(int*)days height:(int*)height
, Этот метод должен возвращать двумерный массив, то есть один конкретный номер кэша. (Он также передает по ссылке размер возвращаемого массива.)
Мои вопросы:
В каком порядке я должен разместить свои измерения, чтобы я мог легко вернуть указатель на подмассив для одного конкретного номера кэша? (Я думаю, что это должно быть первым, но я не на 100%.)
Каким должен быть тип возврата моего метода, чтобы ARC не жаловался? Я не против, если возвращенный массив имеет увеличенное число ссылок или нет, если я знаю, что он делает.
Какого типа должна быть моя переменная экземпляра, которая содержит трехмерный массив? Я думаю, что это должен быть просто указатель, поскольку этот ivar просто представляет указатель на первый элемент в моем массиве. Верный? Если да, то как мне это указать?
Когда я создаю трехмерный массив (для моего ivar), я думаю, что я делаю что-то вродеcalloc(X * Y * Z, sizeof(id))
и привести результат к типу для моего ивара?
При доступе к элементам из трехмерного массива в ivar, я считаю, что мне нужно разыменовывать указатель каждый раз, с чем-то вроде(*myArray)[4][7][2]
, Верный?
Будет ли подобный доступ к двумерному массиву, который я возвращаю из метода?
Нужно ли помечать возвращаемый двумерный массивobjc_returns_inner_pointer
?
Еще раз извините, что это плохой вопрос переполнения стека (он слишком длинный и содержит слишком много деталей). Я надеюсь, что так граждане простят меня. Чтобы улучшить мою карму в Интернете, возможно, я напишу ее в виде поста в блоге, когда этот проект будет выпущен.