jmu*_*phy 6 iphone multithreading request-cancelling
我已经启动了一个延迟线程,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];
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?该方法myStopUpdatingLocation在我调用执行请求的同一个类中定义.
多一点背景.我正在尝试实现的功能是查找用户位置,在该位置周围的某些位置搜索谷歌并在地图上显示多个注释.在viewDidLoad我开始更新位置CLLocationManager.如果我在超时时间内没有达到所需的准确度并且我正在使用a performSelector来执行此操作,那么我会在6秒后建立超时.可能发生的是用户单击视图中的后退按钮,即使我的所有属性都已释放导致崩溃,该线程仍将执行.
提前致谢!
詹姆士
我发现了我的问题,它与我对 PerformSelector 的调用没有任何关系。我发现你必须在释放 MKMapView 和 CLlocationManager 的 delgate 之前将它们设置为 nil 。否则,即使您已经释放了实例,它们仍将继续工作,并且它们有可能使您的应用程序崩溃。
感谢您的帮助诺亚!
| 归档时间: |
|
| 查看次数: |
3489 次 |
| 最近记录: |