无法分配代表

时间:2011-02-15 16:34:48

标签: ipad memory-management delegates

我有两个视图控制器。它们之间的流程如下:

VC1创建VC2并将VC2.delegate设置为self。在VC2中,委派属性已分配,而不是保留。当显示VC2时,VC1被解除分配,因此VC2的委托属性是一个僵尸对象。 VC2应该从服务器检索一些数据并使用该数据调用委托,但由于委托已经被释放,因此无法工作。

我的问题:我应该在VC2中保留委托并在VC2的dealloc方法中释放它,或者我在这里遗漏了一些基本的东西,因为iPhone中的委托模式建议分配代理而不是保留它们。

谢谢!

1 个答案:

答案 0 :(得分:0)

在解除VC1之前,应该将委托设置为nil。 VC2不应该具有VC1的任何知识(只有它符合的协议)。

在VC2中保留VC1后,VC1可能永远不会被释放。 (只有非常丑陋的代码结构)

很明显,当对象VC1解除分配时,必须进行清理,因此必须将委托设置为nil。

回到你的问题:你永远不应该保留一个代表。它只是代码构造。