如何知道ios委托是否已释放

如何知道ios委托是否已释放,ios,architecture,exc-bad-access,delegation,nsobject,Ios,Architecture,Exc Bad Access,Delegation,Nsobject,对于视图-控件-模型结构,我广泛使用委托。通常,在应用程序运行过程中会保留控件和模型对象,这会导致一些小问题 但是,视图对象(通常是UIViewController的实例)会被分配和释放多次 我知道如何避免EXC\u BAD\u访问错误,在解除分配时,将nil设置为分配了dynamic UIViewController实例的委托对象 然而,即使我总是使用: if ([delegate respondsToSelector:@selector(communityModel:finishedDele

对于视图-控件-模型结构,我广泛使用委托。通常,在应用程序运行过程中会保留控件和模型对象,这会导致一些小问题

但是,视图对象(通常是UIViewController的实例)会被分配和释放多次

我知道如何避免EXC\u BAD\u访问错误,在解除分配时,将nil设置为分配了dynamic UIViewController实例的委托对象

然而,即使我总是使用:

if ([delegate respondsToSelector:@selector(communityModel:finishedDeletingComment:)]) {
    [delegate communityModel:self finishedDeletingComment:succeeded];
}
它不是防止错误的完美工具。如果不同的视图对象共享一个控制对象的一个或有限数量的代理,则总是容易导致代理被另一个代理无意中替换,从而导致EXC_BAD_访问

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

我怀疑是否应该改变我通常为委托设置属性的方式。我使用这种方式设置代理的属性:

@property (nonatomic, assign) id<ControlDelegate> delegate;
我是否对属性设置持怀疑态度?当使用委托的对象是委托的成员或委托的成员等时,我将委托声明为分配属性。在这种情况下,保留属性将导致内存泄漏。 在其他地方,我看不出有什么理由不授权。如果您可以接受,请尝试将您的财产声明为:

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