对于我的项目,我正在创建委托类。当我指定obj.delegate = self时,[self retainCount]增加1。因此,具有保留计数的已分配对象是2.如何释放委托对象和分配的对象retaincount为1?
此致 作者Srini
答案 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而不会失败,这意味着你也不应该在使用前检查引用。