我不知道如何释放一个Objective-C对象,我已经存储在一个老式的c数组。 (注意:在经过大量搜索之后写这篇文章时,我想我在测试代码中发现了一个错误,所以这似乎是一个解决方案,而不是一个问题。那么,我花了很多时间在它上面我会发布它......)发布Objective-C对象与ARC数组C对象
我想将旧代码转换为ARC,因为我花费了太多的时间来调试内存管理相关的错误(抱歉---保留/释放规则只是简单的在我的脊椎上并没有硬连线,并且我花了几个小时才找到一个失踪的保留,因为这些错误在无关的时刻弹出,可能在记忆清理期间或之后)。
所以我有与c-风格数组一些现有的代码(比如说的UILabel*
的一个二维阵列),其中I可以愉快地calloc()
指针和访问它们通过一些array[col*colstride+row*rowstride]
,其中array
是类型UILabel **
的;我们假设UILabel*
以随机顺序填充,所以我不能使用NSMutableArray
。
现在在ARC中,编译器希望我使array
的类型为UILabel *__strong*
,看起来(有些人会这样写为__strong UILabel **
)。
我不明白的是我该如何告诉ARC在需要时释放UILabel
对象(比如在使用c数组的对象的dealloc()
中)。在试图理解这个问题时,我有一小组对象Memory
和MemoryUnit
,前者试图存储后者的大c-阵列。
-(Memory*)init {
self = [super init];
if (self) {
MemoryUnit * unit = [[MemoryUnit alloc] init];
array = (__strong id *) calloc(sizeof(MemoryUnit*), 1024);
array[0] = unit;
}
return self;
}
-(void)dealloc {
for (int i=0; i<1024; i++) array[i]=nil;
free(array);
}
在MemoryUnit
我们有物体被存储在C-阵列(因此这是MemoryUnit
在上述UILabel
的地方)英寸对于测试,我的代码为
-(void)dealloc {
NSLog(@"removed %x", (int)self);
}
在其dealloc()
进行调试。
您应该添加您的解决方案作为答案,而不是将其附加到问题上。理解起来要容易得多,而且可以链接到答案。 –