ARC下的id数组成员实例

Jay*_*hao 5 objective-c automatic-ref-counting

我想写这样的东西:

@interface Foo{

    __strong id idArray[]; 

}
@end
Run Code Online (Sandbox Code Playgroud)

但是编译器抱怨它:

Field has incomplete type '__strong id []'.
Run Code Online (Sandbox Code Playgroud)

如何在ARC下创建id数组成员实例?我如何初始化该数组?使用malloc?新[]?

我不想使用NSArray,因为我正在将一个大型库转换为ARC,这将导致很多工作.

Kaz*_*oto 11

如果要动态分配数组,请使用id __strong的指针类型.

@interface Foo
{
    id __strong *idArray;
}
@end
Run Code Online (Sandbox Code Playgroud)

使用calloc分配数组.id __strong必须初始化为零.

idArray = (id __strong *)calloc(sizeof(id), entries);
Run Code Online (Sandbox Code Playgroud)

完成后,必须将nil设置为数组的条目,并且空闲.

for (int i = 0; i < entries; ++i)
    idArray[i] = nil;
free(idArray);
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,预先将数组(使用calloc,bzero,memset等)置零是至关重要的,否则ARC将在您分配值时尝试释放垃圾非零值.(有关详细信息,请参阅http://stackoverflow.com/a/9119631/120292.)此外,在释放阵列之前未能取消所有值将导致泄漏. (2认同)