我已经启动了一个延迟线程,performSelector
但用户仍然可以在当前视图上点击后退按钮,从而导致调用 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
在我调用执行请求的同一类中定义。
多一点背景。我试图实现的功能是找到用户位置,在谷歌搜索该位置周围的一些位置,并在地图上显示几个注释。在viewDidLoad
我开始使用 更新位置CLLocationManager
。如果我在超时内没有达到我想要的准确度,我会在 6 秒后建立超时,我正在使用 aperformSelector
来执行此操作。可能发生的情况是用户单击视图中的后退按钮,即使我的所有属性都已释放导致崩溃,该线程仍将执行。
提前致谢!
詹姆士