一千萬個為什麽

搜索

iphone - 測試對象是否存在

我的應用程序中有幾個對象在某些時候可以變為零,我有理論上用於將這些對象設置為零的方法。

但是,如果我嘗試將一個不存在的對象置為零,那麽應用程序將崩潰。

例如...

[object1 release];
object1 = nil;

//... 在那之後

[object1 removeFromSuperview];//this will crash

然後我想,為什麽不去除之前測試對象是否存在...

if (object1 != nil)
 [object1 removeFromSuperview]; 
// this will crash too, because object1 cannot be tested for nil because it does not exist

如果對象存在,如何測試該對象是否為零? 某事

if (object1 exists( {
  if(object1 != nil))
    [object1 removeFromSuperview)
}

這可能嗎?

我加上這個澄清......

我的意思是:想象我在頭上聲明了object1並在代碼上初始化。因此,它存在並指向有效的參考。在某些時候,對象可能會被釋放,因此引用仍指向一個對象但該對象已被釋放。即使我釋放後把物體放到零,我也無法用它做任何事情。

問題是:我有一些異步的方法。其中一個掃描某些對象並在找到它們時將其刪除。我必須檢查對象是否存在,並且引用指向有效對象,然後再次釋放它。這就是重點:如何在再次釋放對象之前測試對象是否存在及其引用是否指向有效的現有對象,以便再次釋放已釋放的對象並使應用程序崩潰。

最佳答案

簡而言之,您確定指針是否仍然有效的問題正在走錯路。

釋放對象後,必須立即將其值設置為null,以便不再對其進行控制。如果兩個方法異步運行訪問同一個對象,則必須在該點同步它們,以便在另一個線程有機會中斷之前,在一個線程中同時發布和設置為null。

轉載註明原文: iphone - 測試對象是否存在