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

sri*_*sri 6 delegates objective-c

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

关心Srini

Jer*_*myP 8

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

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

@property (assign) DelegateType delegate; // replace "DelegateType" with whatever type you need
Run Code Online (Sandbox Code Playgroud)

并删除-dealloc释放委托的行.

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

-(DelegateType) delegate
{
    return delegate;
}

-(void) setDelegate: (DelegateType) newValue
{
    delegate = newValue;
}
Run Code Online (Sandbox Code Playgroud)

  • @Chandra Patni:当委托对象被释放时,将委托设置为nil很重要(或者在ARC之前和归零弱引用之前). (3认同)

Ste*_*ton 3

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