我广泛使用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;
我是否正确地怀疑房产设置?
答案 0 :(得分:0)
当我的对象(将使用委托)是委托的成员或委托成员的成员等时,我将委托声明为assign
属性。在这种情况下,retain
属性将导致内存泄漏。
在其他地方,我没有看到不保留代表的理由。如果您可以接受 - 请尝试将您的财产声明为:
@property (nonatomic, retain) id<ControlDelegate> delegate;