1
我有一個對象系統,我用C編寫的包含對象的引用計數(對象只是具有retainCount int的結構)。如果我有以下塊:如何實現自定義保留釋放塊與鏗鏘
typedef void (^MyBlock)();
void doBlockStuff(MyBlock b){
Block_copy(b);
//...
}
__block int i=0;
doBlockStuff(^{
++i;
});
然後運行時堆 - 調用Block_copy時分配整數i。然而,如果使用,而不是一個引用計數對象:
typedef void (^MyBlock)();
void doBlockStuff(MyBlock b){
Block_copy(b);
//...
}
__block Object* obj=Object_New();
doBlockStuff(^{
DoObjectStuff(obj);
});
則指針本身,而不是它的參考值,是堆分配由運行時(雖然它是已經由Object_New函數堆分配)。因爲該對象是引用計數,所以在該塊被釋放之前,另一個函數可能會出現並釋放該對象。如果我明確保留該對象,那麼它永遠不會被釋放。所以,我的問題是,如何在Block_dealloc被釋放時顯式釋放對象,如何添加回調?
謝謝。
你的問題是相當混亂(不是你的錯)在`Object`是根類Objective-C的環保,無毒在'NSObject`之前由AppKit使用。實際上,當塊被複制/釋放時,您需要像自動保留/釋放那樣執行`NSObject`? – bbum 2011-02-09 08:12:12