2011-02-15 33 views
0

我有兩個視圖控制器。它們之間的流程如下:不能分配代表

VC1創建VC2並將VC2.delegate設置爲self。在VC2中,委派屬性被分配,而不是保留。當VC2顯示時,VC1被處理,因此VC2的委託屬性是一個殭屍對象。 VC2應該從服務器檢索一些數據並使用該數據調用委託,但這不起作用,因爲委託已經被釋放。

我的問題:我應該在VC2中保留委託並在VC2的dealloc方法中釋放它,或者我缺少一些基本的東西,因爲iPhone中的委託模式建議分配委託而不保留委託。

謝謝!

回答

0

在將VC1解除分配之前,您應該將委託設置爲零。 VC2不應該有任何VC1的知識(只有它符合的協議)。

將VC1保留在VC2中後,VC1可能永遠不會被釋放。 (只有一個非常難看的代碼結構)

很明顯,當對象VC1解除分配時,必須進行清理,因此必須將委託設置爲nil。

回到你的問題:你永遠不應該保留一個委託。它只是代碼構造。

+0

但委託人是VC1。在VC1的一個方法裏面,我有VC2 vc2 = ...; vc2.delegate = self。然後VC2正在顯示,並且VC1正在被釋放,因此VC2的委託屬性也被釋放。 VC2確實沒有任何VC1的知識。 – 2011-02-15 16:51:29