gpt4 book ai didi

iphone - cancelPreviousPerformRequestWithTarget 不会取消我之前使用 PerformSelector 启动的延迟线程

转载 作者:行者123 更新时间:2023-12-03 18:44:50 25 4
gpt4 key购买 nike

我已经使用performSelector启动了一个延迟线程,但用户仍然可以点击当前 View 上的后退按钮,从而导致调用dealloc。当发生这种情况时,我的线程似乎仍然被调用,这导致我的应用程序崩溃,因为线程尝试写入的属性已被释放。为了解决这个问题,我尝试调用 cancelPreviousPerformRequestsWithTarget 来取消之前的请求,但它似乎不起作用。下面是一些代码片段。

- (void) viewDidLoad {
[self performSelector:@selector(myStopUpdatingLocation) withObject:nil afterDelay:6];
}

- (void)viewWillDisappear:(BOOL)animated {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(myStopUpdatingLocation) object:nil];
}

我在这里做错了什么吗?方法 myStopUpdatingLocation 是在我调用执行请求的同一类中定义的。

更多背景知识。我想要实现的功能是找到用户位置,在谷歌中搜索该位置周围的一些位置,并在 map 上显示几个注释。在 viewDidLoad 上,我开始使用 CLLocationManager 更新位置。如果我在超时内没有达到所需的准确度,我会在 6 秒后建立一个超时,并且我使用 performSelector 来执行此操作。可能发生的情况是,用户单击 View 中的后退按钮,即使我的所有属性已被释放,导致崩溃,该线程仍将执行。

提前致谢!

詹姆斯

最佳答案

我发现了我的问题,它与我对 PerformSelector 的调用没有任何关系。我发现你必须在释放 MKMapView 和 CLlocationManager 的 delgate 之前将它们设置为 nil 。否则,即使您已经释放了实例,它们仍将继续工作,并且它们有可能使您的应用程序崩溃。

感谢您的帮助,诺亚!

关于iphone - cancelPreviousPerformRequestWithTarget 不会取消我之前使用 PerformSelector 启动的延迟线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2862293/

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