Pregunta

Quiero escribir algo como esto:

@interface Foo{

    __strong id idArray[]; 

}
@end

Pero el compilador se queja de ello:

Field has incomplete type '__strong id []'.

¿Cómo puedo crear una instancia de miembro de la matriz de identificación en ARC? ¿Y cómo inicial esa matriz? ¿Usando malloc? nuevo[]?

No quiero usar NsArray porque estoy convirtiendo una gran biblioteca en ARC y eso causará mucho trabajo.

¿Fue útil?

Solución

Si desea asignar dinámicamente la matriz, use el tipo de puntero de ID __strong.

@interface Foo
{
    id __strong *idArray;
}
@end

Asignar la matriz usando Calloc. ID __strong debe intilizarse con cero.

idArray = (id __strong *)calloc(sizeof(id), entries);

Cuando haya terminado, debe configurar nulo en las entradas de la matriz y gratis.

for (int i = 0; i < entries; ++i)
    idArray[i] = nil;
free(idArray);

Otros consejos

Tienes que especificar un tamaño de matriz, por ejemplo:

__strong id idArray[20]; 

O le das a la matriz un tamaño fijo:

__strong id idArray[20];

O usa un puntero y un malloc:

__strong id *idArray;

...

self.idArray = calloc(sizeof(id), num);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top