如何知道ios委托是否已发布

时间:2011-05-06 08:25:23

标签: ios architecture exc-bad-access delegation nsobject

我广泛使用VIEW - CONTROL - MODEL结构。通常,CONTROL&在运行应用程序期间会保留MODEL对象,几乎没有问题。

但是,VIEW对象(通常是UIViewController的实例)会被分配并多次释放。

nil设置为分配了动态UIViewController实例的委托对象,当它被解除分配时,我知道如何避免EXC_BAD_ACCESS错误。

然而,即使我总是使用:

if ([delegate respondsToSelector:@selector(communityModel:finishedDeletingComment:)]) {
    [delegate communityModel:self finishedDeletingComment:succeeded];
}

它不是完美的防止错误。如果不同的VIEW对象共享CONTROL对象的一个​​或有限数量的委托,则它总是容易导致委托被另一个无意替换,导致EXC_BAD_ACCESS

是否有更好的方法来管理委托,知道在调用委托方法时它是否真的可用?

我怀疑是否应该更改为委托设置属性的常用方法。我用这种方式来设置委托的属性:

@property (nonatomic, assign) id<ControlDelegate> delegate;

我是否正确地怀疑房产设置?

1 个答案:

答案 0 :(得分:0)

当我的对象(将使用委托)是委托的成员或委托成员的成员等时,我将委托声明为assign属性。在这种情况下,retain属性将导致内存泄漏。 在其他地方,我没有看到不保留代表的理由。如果您可以接受 - 请尝试将您的财产声明为:

@property (nonatomic, retain) id<ControlDelegate> delegate;