Objective-C ARC y pasar matrices C de objetos

Lo siento si esta es una pregunta un poco de C-noob: Sé que necesito apuntar mis punteros. Desafortunadamente, estoy en una fecha límite, así que no tengo tiempo para trabajar en un capítulo completo del libro, así que espero un consejo un poco más específico.

Quiero almacenar algunos objetos de Objective-C en una matriz C. Estoy usando ARC. Si estuviera en la Mac, podría usar NSPointerArray en su lugar, pero estoy en iOS y eso no está disponible.

Guardaré una matriz C tridimensional: conceptualmente, mis dimensiones son día, altura y número de caché. Cada elemento será un puntero a un objeto objetivo-C o NULL.

El número de cachés (es decir, el tamaño de la dimensión cacheNumber) se conoce en el momento de la compilación, pero los otros dos no se conocen. Además, la matriz podría ser muy grande, por lo que necesito asignar memoria dinámicamente para ello.

n cuanto a la semántica de propiedad, necesito fuertes referencias a los objetos.

Me gustaría que toda la matriz tridimensional sea una variable de instancia en un objeto objetivo-C.

Planeo tener un método que sea- tableForCacheNumber:(int)num days:(int*)days height:(int*)height. Ese método debería devolver una matriz bidimensional, que es un número de caché específico. (También devuelve por referencia el tamaño de la matriz que está devolviendo).

Mis preguntas

¿En qué orden debo poner mis dimensiones para poder devolver fácilmente un puntero a la submatriz para un número de caché específico? (Creo que debería ser el primero, pero no estoy al 100%)

¿Cuál debería ser el tipo de retorno de mi método, para que ARC no se queje? No me importa si la matriz devuelta tiene un mayor recuento de referencias o no, siempre que sepa qué está haciendo.

¿Qué tipo de variable de instancia debería tener mi matriz tridimensional? Creo que debería ser solo un puntero, ya que ese ivar solo representa el puntero al primer elemento que está en mi matriz. ¿Correcto? Si es así, ¿cómo especifico eso?

Cuando creo la matriz tridimensional (para mi ivar), creo que hago algo comocalloc(X * Y * Z, sizeof(id)), y emitir el resultado al tipo de mi ivar?

Cuando accedo a elementos de la matriz tridimensional en el ivar, creo que tengo que desreferenciar el puntero cada vez, con algo como(*myArray)[4][7][2]. ¿Correcto

¿Se accederá de manera similar a la matriz bidimensional que regreso del método?

¿Necesito etiquetar la matriz bidimensional devuelta conobjc_returns_inner_pointer?

Lamento una vez más que esta es una pregunta un poco mala de Stack Overflow (es demasiado larga y tiene demasiadas partes). Espero que los ciudadanos SO me perdonen. Para mejorar mi karma entre redes, tal vez lo escriba como una publicación de blog cuando este proyecto se haya enviado.

Respuestas a la pregunta(6)

Su respuesta a la pregunta