gpt4 book ai didi

ios - 如何知道ios委托(delegate)是否被释放

转载 作者:行者123 更新时间:2023-11-28 17:46:03 26 4
gpt4 key购买 nike

我对 VIEW - CONTROL - MODEL 结构广泛使用委托(delegate)。通常,CONTROL 和 MODEL 对象会在应用程序运行期间保留,不会引起什么问题。

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

nil 设置为分配有动态 UIViewController 实例的委托(delegate)对象,当它被释放时,这是我知道如何避免 EXC_BAD_ACCESS 错误的一种方法。

但是,即使我总是使用:

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

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

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

我怀疑是否应该更改我通常设置委托(delegate)属性的方式。我使用这种方式来设置委托(delegate)的属性:

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

我对属性设置的质疑是不是走对了路?

最佳答案

当我的对象(将使用委托(delegate))是委托(delegate)成员或委托(delegate)成员等的成员时,我将委托(delegate)声明为 assign 属性。在这种情况下,保留 属性会导致内存泄漏。在其他地方,我看不出不保留委托(delegate)的原因。如果您可以接受 - 尝试将您的属性(property)声明为:

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

关于ios - 如何知道ios委托(delegate)是否被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5908733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com