Foo*foo1;
foo1=[[Foo alloc]init];
發佈後,對象foo1
還指出了一些記憶,但對象不存在。我想要做這樣的事情:測試對象是否存在?
if (foo1)
{
doSomething;
}
因爲也許此對象存在,我不能指定nil
,也許,如果把它分配給nil
我會泄漏。
我怎樣才能知道對象是否存在?
Foo*foo1;
foo1=[[Foo alloc]init];
發佈後,對象foo1
還指出了一些記憶,但對象不存在。我想要做這樣的事情:測試對象是否存在?
if (foo1)
{
doSomething;
}
因爲也許此對象存在,我不能指定nil
,也許,如果把它分配給nil
我會泄漏。
我怎樣才能知道對象是否存在?
每當你釋放一個對象,你應該設置你的指針爲零。你的情況:
Foo *foo1 = [[Foo alloc] init];
... doing stuff with foo1 ...
[foo1 release], foo1 = nil;
的foo1 = nil
的分配不會以任何方式修改的對象。它清除你的指針對象。既然你已經釋放了對象的保留,顯然你不再關心它,所以你應該清除你的指針。
非常感謝。它幫助了我。 – dpart 2011-03-09 16:49:20
將指針設置爲零更多的是個人偏好,對嗎?我沒有在任何文檔中看到這是需求。我理解背後的想法/推理,但絕不是必需的,我錯了嗎? – 2011-03-09 16:51:01
這不是必需的。 C和ObjC開發人員通常會避免崩潰。有指針指向無效內存是一個壞主意。有點像在你的臥室地板上留下釘子,假設你會記得晚上走路很安全。 – 2011-03-09 23:25:25
當一個對象被釋放,其retainCount爲0
理念。另外,如上所述,甚至不能在這裏調用。 – dpart 2011-03-09 16:51:39
一如以往的錯誤「發送到釋放實例消息」,使用'retainCount'幾乎總是一個壞的需要,以防止懸空指針... – paulbailey 2011-03-09 16:55:38
當一個對象被釋放時,它*有*沒有retainCount。 – 2011-03-09 17:21:28
一旦你釋放你不應該需要擔心,如果它存在與否的對象。內存分配爲您開放,再利用另一個對象隨時所以即使你沒有檢查內存位置,對於你要找回誤導性信息的現有對象。你用這種方法試圖解決什麼問題? – 2011-03-09 16:48:19
我有一個viewcontroller1推動另一個viewcontorller2。當我從viewcontorller2填充數據時,我想將它分配給viewcontorller1。要做到這一點,我使用ViewWillAppear方法。我正在檢查是否(viewcontorller2){做點什麼} – dpart 2011-03-09 17:10:53