2011-08-04 200 views
1

假設我用參數中給定的對象分配一個實例var。我不知道這個對象是什麼,所以我不想保留它。但是,我對該對象的引用在某些時候可能是無效的,例如,如果對象被釋放或即將釋放(autorelease池)。所以,在我的類實例中,我可以知道引用我保存到一個實例變量可以使用沒有任何崩潰的風險?iPhone - 有沒有辦法知道引用是否(仍然)有效?

回答

1

Kris Van Bael是對的,不管你是否知道對象是什麼,如果你想擁有它(如果它是由你來確保對象是活着的),你必須保留它。當您不需要它時釋放它,並將引用設置爲NIL(用於安全性)。

但他們是個例外

有時你不想擁有所有權,最常見的例子是委託。 你不想保留你的委託,因爲它可能已經保留了你,並且如果兩個對象在dealloc方法中相互釋放,你的應用程序將會泄漏。

但是在這種情況下,你不應該關心被釋放的委託:委託應該設置你的「委託」屬性在它的dealloc方法中爲零。

所以

  • 如果你有對象的所有權:保留,別無選擇!
  • 如果對象擁有您的所有權:分配,不用擔心!
+0

那正是我在尋找的東西。謝謝 ! – Oliver

0

您應該將任何發佈的參考設置爲NIL並檢查NIL

+0

我認爲奧利弗擔心外部對象被釋放到別的地方。 –

+0

@Kris Van Bael:是的,就是這樣 – Oliver

2

您應該保留它並在不再需要時釋放它。這正是保留的目的。

1

這種方法非常危險。如果您的應用程序無法跟蹤對象生命週期,那麼您必須更改代碼才能控制它。 無論如何回答你的問題:你可以通過額外保留你的實例變量來保護你的實例變量,然後在不再需要時釋放它。所以你不需要做你想要的支票。

相關問題