2010-03-02 28 views
1

我確定這是一廂情願的想法,但是有沒有與+initialize相對應的一個類,當一個類的所有實例都被釋放時它會自動調用?有沒有課堂拆解對應+初始化?

我在+ initialize中分配一個單例對象,在我的第一個類實例被分配之前調用它。我希望能夠在我的類實例全部被釋放後釋放對象。但是,如果我的課程對象被重新分配,那麼我需要再次調用+initialize。我懷疑Cocoa沒有做到這樣的班級管理水平,這可能是由我來包裝班級經理的班級......

我是否正確?

+0

你想做什麼?即你試圖管理什麼資源表明你需要這種模式? – bbum 2010-03-02 17:27:13

+0

例如,我有一系列按鈕。他們共享一些圖像,存儲爲單例。單例在+初始化調用中設置。如果你釋放所有的按鈕,並且它們被釋放,那麼我希望共享的圖像也被釋放。有一個拆解對應+初始化會讓我這樣做。否則,我將不得不使用共享映像自行管理對象的數量,然後在客戶端對象的計數爲零時釋放它們。 – mahboudz 2010-03-03 09:43:23

+2

爲什麼不在創建按鈕之前簡單地創建圖像,通過init方法將圖像傳遞給按鈕,然後釋放您創建的圖像?讓按鈕執行正常的保留/釋放,並且不必擔心單件對象。 – 2010-03-06 20:14:31

回答

1

沒有。

我建議不要刪除單身人士,因爲它的只是一個對象,這不會佔用太多空間。

如果您確實需要此行爲,只需覆蓋+alloc-dealloc即可對當前實例進行計數。 (或垃圾收集環境中的-finalize)。

+0

「無論如何,當類加載到內存時調用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

+0

@彼得:哦,謝謝,你說得對。 – 2010-03-02 17:54:23

0

這不僅很好地工作ARC下(與歸零弱引用,即iOS5中),但是一個很好的辦法做這樣的事情是具有對象類的方法(沒有額外的單),即:

+ (id)someResource 
{ 
    __weak static id resource; 
    if (!obj) 
    { 
     return resource; 
    } 
    else 
    { 
     id tmpResource = [SomeResource resource]; 
     resource = tmpResource; 
     return resource; 
    } 
} 

+someResource只要其他人堅持到resource就會始終返回相同的對象,但只要沒有其他人使用它就會消失。