экземпляр массива id в ARC - PullRequest
       0

экземпляр массива id в ARC

5 голосов
/ 05 сентября 2011

Я хочу написать что-то вроде этого:

@interface Foo{

    __strong id idArray[]; 

}
@end

Но компилятор жалуется на это:

Field has incomplete type '__strong id []'.

Как мне создать экземпляр члена массива идентификаторов в ARC? И как мне инициализировать этот массив? Используете malloc? новый []?

Я не хочу использовать NSArray, потому что я конвертирую большую библиотеку в ARC, и это вызовет много работы.

Ответы [ 3 ]

11 голосов
/ 05 сентября 2011

Если вы хотите динамически размещать массив, используйте тип указателя id __strong.

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

Выделите массив с помощью calloc.id __strong должен начинаться с нуля.

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

Когда вы закончите, вы должны установить nil для записей массива и освободить.

for (int i = 0; i < entries; ++i)
    idArray[i] = nil;
free(idArray);
1 голос
/ 05 сентября 2011

Либо вы задаете массив фиксированного размера:

__strong id idArray[20];

, либо используете указатель и malloc:

__strong id *idArray;

...

self.idArray = calloc(sizeof(id), num);
1 голос
/ 05 сентября 2011

Вы должны указать размер массива, например ::100100

__strong id idArray[20]; 
...