gpt4 book ai didi

iPhone 开发人员 - 委托(delegate)、通知、取消分配前取消订阅?

转载 作者:太空狗 更新时间:2023-10-30 03:49:21 27 4
gpt4 key购买 nike

在我关于使用委托(delegate)或 UIControl 事件的问题中,这是 Kendall Helmstetter Geln 的回答:

Both are about an equal load to work with - with a delegate you have to set yourself and then remember to unset yourself before you are deallocated. You have to do the same thing with notifications, remember to start listening and then unsubscribe before you are deallocated.

它们是什么意思,在取消分配之前先取消订阅,取消设置?我没有做任何事情。有人可以解释一下它是什么以及如何做吗?

谢谢!!

最佳答案

如果您的生命周期比您委托(delegate)的对象短,您需要将自己从委托(delegate)中移除。在几乎所有情况下,您的生命周期都等于或长于您委托(delegate)的对象。也就是说,养成这是一个好习惯。考虑一下您是 UITableView 的委托(delegate)的情况。在 -init 中,您可能调用:

self.myTableView.delegate = self;

那么在 -dealloc 中说

可能是明智的
_myTableView.delegate = nil;
[_myTableView release];
_myTableView = nil;

这样做的原因是 myTableView 可能会被其他对象保留,因此在您释放它时可能不会释放它。如果它在您离开后进行委托(delegate)调用,您的应用程序将崩溃。所以在这里清除委托(delegate)指针是个好主意。

与 NSNotificationCenter 类似,您应该在 -dealloc 中删除自己,因此:

[[NSNotificationCenter defaultCenter] removeObserver:self];

这会将您从所有观察中移除。如果您的类(class)曾经注册过任何通知,您应该在 -dealloc 中执行此操作。如果您不这样做,而您正在观察的通知在您离开后出现,则该应用程序将会崩溃。

这对 NSTimers 来说不是必需的,因为 NSTimers 保留了它们的目标(你)。

关于iPhone 开发人员 - 委托(delegate)、通知、取消分配前取消订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309917/

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