天天看點

【iOS開發】---- 關于協定delegate在dealloc中置為nil的問題

        這裡不說怎麼使用delegate,那個教程上網一查一堆的。

        昨天在網上下載下傳了一個例子,關于CALayer 繪圖的,用到了layer.delegate,弄到工程裡,繪圖頁面是通過導航push的,結果在pop出那個頁面的時候崩掉了。

        檢視報錯資訊,說我那個類的執行個體被釋放掉了,但是還是發送給了它資訊。代碼不多,我注釋掉了“layer.delegate=self;”這句就不崩了。網上查了一下,得到了解決辦法: 隻要在dealloc裡面将layer.delegate 置為nil就行了。

        我在網上查閱了很多關于delegate的資訊,說delegate可以在dealloc裡面置為nil,這是一個保險的做法,但是又不是必須的。這樣做的原因是可以避免這個類被釋放掉了,但是delegate卻還會被引用造成的問題。

       但是我仍然不明白什麼時候應該将delegate置為nil。如果有哪位知道,請不吝告知,謝謝!

      順帶再補充一點:有人喜歡在delegate調用代理方法時判斷delegate能否響應代理方法,我在查詢上面的問題時在官方文檔上看到,隻有在調用optional(可選)代理方法時候才需要去判斷是否響應,其實是判斷可選方法是否有實作。