如何在objective-c中释放“委托”记忆?

时间:2010-11-15 09:46:27

标签: objective-c delegates

对于我的项目,我正在创建委托类。当我指定obj.delegate = self时,[self retainCount]增加1。因此,具有保留计数的已分配对象是2.如何释放委托对象和分配的对象retaincount为1?

此致 作者Srini

3 个答案:

答案 0 :(得分:8)

通常的约定是不保留代表。这主要是因为通常的模式是对象的所有者通常也是它的委托,如果委托被保留,你将得到一个保留周期。

如果您使用的是某个属性,请按以下方式声明:

@property (assign) DelegateType delegate; // replace "DelegateType" with whatever type you need

删除-dealloc中释放委托的行。

如果合成了访问者,那么现在就完成了。如果没有,请让访问者分配访问者,例如

-(DelegateType) delegate
{
    return delegate;
}

-(void) setDelegate: (DelegateType) newValue
{
    delegate = newValue;
}

答案 1 :(得分:3)

一般来说,你不应该留下代表。通常的模式就是分配它们。否则,正如您所注意到的,您将在发布周期等方面遇到各种问题。

答案 2 :(得分:1)

您如何定义代理人的访问者

@property (nonatomic, retain) Whatever *delegate;

@property (nonatomic, assign) Whatever *delegate;

如果是前者,则保留计数将增加,这不是您想要与委托进行的操作。创建者有责任保留代表。你只被告知它,不应该保留它。只有Obj C才能将消息发送到nil而不会失败,这意味着你也不应该在使用前检查引用。