2011-03-09 90 views
0
Foo*foo1; 

foo1=[[Foo alloc]init]; 

發佈後,對象foo1還指出了一些記憶,但對象不存在。我想要做這樣的事情:測試對象是否存在?

if (foo1) 
{ 
    doSomething; 
} 

因爲也許此對象存在,我不能指定nil,也許,如果把它分配給nil我會泄漏。

我怎樣才能知道對象是否存在?

+0

一旦你釋放你不應該需要擔心,如果它存在與否的對象。內存分配爲您開放,再利用另一個對象隨時所以即使你沒有檢查內存位置,對於你要找回誤導性信息的現有對象。你用這種方法試圖解決什麼問題? – 2011-03-09 16:48:19

+0

我有一個viewcontroller1推動另一個viewcontorller2。當我從viewcontorller2填充數據時,我想將它分配給viewcontorller1。要做到這一點,我使用ViewWillAppear方法。我正在檢查是否(viewcontorller2){做點什麼} – dpart 2011-03-09 17:10:53

回答

2

每當你釋放一個對象,你應該設置你的指針爲零。你的情況:

Foo *foo1 = [[Foo alloc] init]; 

... doing stuff with foo1 ... 

[foo1 release], foo1 = nil; 

foo1 = nil的分配不會以任何方式修改的對象。它清除你的指針對象。既然你已經釋放了對象的保留,顯然你不再關心它,所以你應該清除你的指針。

+0

非常感謝。它幫助了我。 – dpart 2011-03-09 16:49:20

+0

將指針設置爲零更多的是個人偏好,對嗎?我沒有在任何文檔中看到這是需求。我理解背後的想法/推理,但絕不是必需的,我錯了嗎? – 2011-03-09 16:51:01

+0

這不是必需的。 C和ObjC開發人員通常會避免崩潰。有指針指向無效內存是一個壞主意。有點像在你的臥室地板上留下釘子,假設你會記得晚上走路很安全。 – 2011-03-09 23:25:25

-1

當一個對象被釋放,其retainCount爲0

+0

理念。另外,如上所述,甚至不能在這裏調用。 – dpart 2011-03-09 16:51:39

+0

一如以往的錯誤「發送到釋放實例消息」,使用'retainCount'幾乎總是一個壞的需要,以防止懸空指針... – paulbailey 2011-03-09 16:55:38

+0

當一個對象被釋放時,它*有*沒有retainCount。 – 2011-03-09 17:21:28