限定符__unsafe_unretained和week有很多共同點。例如,它們都不會增加保留計數。例如,如果一個視圖控制器持有一個__unsafe_unretained IBOutlet到一個UIView中,並且從視圖層次結構中刪除了那個非常UIView,那麼你(假設你沒有在其他任何地方保留這個視圖)將減少保留計數並且最有可能的是釋放UIView 。然而指針仍然指向那個位置,並且留下了懸掛。如果你知道發生了什麼,這不是很好,但也沒有問題。當屬性達到保留計數0時,弱屬性幫助你避免懸掛指針。
現在,如果你的應用程序崩潰或者屬性顯示爲殭屍,那麼它們將被釋放 - 不管哪個類。
一個不完全正確的陳述是,如果您保留屬性,您將創建一個保留週期。雖然有創建保留週期的可能性,但它實際上取決於您的實現,而不僅僅是屬性聲明。當你保留一個對象時,你擁有所有權,直到你完成了這個對象,通過增加它的保留計數來防止它被釋放。如果您的代表在您持有弱指針時已獲得釋放,則不會阻止它被釋放。我假設你在這裏處理模態視圖控制器 - UIPopoverController是精確的(只是一個猜測)。
您應該使用儀器並查看對象的生命週期並查看誰保留/釋放它。知道這可能會有幫助。否則,你可以粘貼一些代碼,也許會有一個很好的人來幫助你找到問題。
歡呼 羅尼
來源
2014-01-07 21:32:26
Ron
「爲什麼代表應該是不安全的,不會疲軟?」他們不應該。 – newacct