2011-10-25 40 views
0

首先,我使用ARC和定位的iOS4 +iOS版 - 具有自定義類參考的UIViewController對象

我有一個需要自定義的UIViewController引用自定義類。 除非我錯過了某些東西,那麼引用該屬性retain意味着每當我的類破壞時,UIViewController都會破壞? 或者是否意味着appdelegate(它創建了UIViewController)和我的自定義類需要被釋放,以便解除分配UIViewController?

所以我也讀了關於__unsafe_unretained屬性。我的自定義類是否可以簡單地使用它來引用UIViewController?由於appdelegate最終會釋放UIViewController,因此不存在懸掛指針的風險?

感謝

編輯:自定義類是單對象,將生活在整個過程中,如果它的事項

回答

1

每個對象都有一個保留計數,基本上決定了它是否需要堅持。在這種情況下,您的AppDelegate已經保留了UIViewController(保留數爲1),但這並不意味着您的自定義類不能保留UIViewController(保留數爲2)。所以你的第二個場景更接近真相:當你的自定義類破壞並釋放UIViewController時,保留計數將回落到1.然後,當AppDelegate破壞並釋放它時,計數將降到0,並且對象將被銷燬。

爲了讓這一步更進一步,如果您的自定義類的內部將UIViewController分配給另一個也保留它的bult-in或自定義類,則計數將繼續增加,然後隨着每個對象反過來釋放它的興趣。

+0

我明白了。那麼在我的自定義類中使用retain還有什麼缺點嗎?或者我還應該使用__unsafe_unretain?我基本上使用自定義類訪問UIViewController中的方法/變量 – KaiserJohaan

+0

您應該使用retain。它不會傷害任何東西,並且即使您的UIViewController在您的自定義類的生命週期中不太可能被破壞也是很好的做法。一般而言,只要您的保留和釋放次數匹配(並且您不創建循環保留循環),您將會好起來。 –

+0

當我使用我的自定義類來訪問UIViewController的方法和變量時,是否也必須將它們與@synchonrize放在一起? – KaiserJohaan