我確定這是一廂情願的想法,但是有沒有與+initialize
相對應的一個類,當一個類的所有實例都被釋放時它會自動調用?有沒有課堂拆解對應+初始化?
我在+ initialize中分配一個單例對象,在我的第一個類實例被分配之前調用它。我希望能夠在我的類實例全部被釋放後釋放對象。但是,如果我的課程對象被重新分配,那麼我需要再次調用+initialize
。我懷疑Cocoa沒有做到這樣的班級管理水平,這可能是由我來包裝班級經理的班級......
我是否正確?
我確定這是一廂情願的想法,但是有沒有與+initialize
相對應的一個類,當一個類的所有實例都被釋放時它會自動調用?有沒有課堂拆解對應+初始化?
我在+ initialize中分配一個單例對象,在我的第一個類實例被分配之前調用它。我希望能夠在我的類實例全部被釋放後釋放對象。但是,如果我的課程對象被重新分配,那麼我需要再次調用+initialize
。我懷疑Cocoa沒有做到這樣的班級管理水平,這可能是由我來包裝班級經理的班級......
我是否正確?
沒有。
我建議不要刪除單身人士,因爲它的只是一個對象,這不會佔用太多空間。
如果您確實需要此行爲,只需覆蓋+alloc
和-dealloc
即可對當前實例進行計數。 (或垃圾收集環境中的-finalize
)。
「無論如何,當類加載到內存時調用initialize。」你正在考慮'load'。當一個類(或它的一個子類)收到它的第一條消息時,initialize被調用。請參閱http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/和http://www.friday.com/bbum/2009/09/06/iniailize-can-被執行多次加載不太多/ – 2010-03-02 12:53:25
@彼得:哦,謝謝,你說得對。 – 2010-03-02 17:54:23
這不僅很好地工作ARC下(與歸零弱引用,即iOS5中),但是一個很好的辦法做這樣的事情是具有對象類的方法(沒有額外的單),即:
+ (id)someResource
{
__weak static id resource;
if (!obj)
{
return resource;
}
else
{
id tmpResource = [SomeResource resource];
resource = tmpResource;
return resource;
}
}
+someResource
只要其他人堅持到resource
就會始終返回相同的對象,但只要沒有其他人使用它就會消失。
你想做什麼?即你試圖管理什麼資源表明你需要這種模式? – bbum 2010-03-02 17:27:13
例如,我有一系列按鈕。他們共享一些圖像,存儲爲單例。單例在+初始化調用中設置。如果你釋放所有的按鈕,並且它們被釋放,那麼我希望共享的圖像也被釋放。有一個拆解對應+初始化會讓我這樣做。否則,我將不得不使用共享映像自行管理對象的數量,然後在客戶端對象的計數爲零時釋放它們。 – mahboudz 2010-03-03 09:43:23
爲什麼不在創建按鈕之前簡單地創建圖像,通過init方法將圖像傳遞給按鈕,然後釋放您創建的圖像?讓按鈕執行正常的保留/釋放,並且不必擔心單件對象。 – 2010-03-06 20:14:31