我不知道如何釋放一個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()
進行調試。
您應該添加您的解決方案作爲答案,而不是將其附加到問題上。理解起來要容易得多,而且可以鏈接到答案。 –