我已經推出使用performSelector
延遲的線程,但用戶仍然有能力擊中當前視圖的後退按鈕,導致dealloc被調用。當發生這種情況時,我的線程似乎仍然被調用,導致我的應用程序崩潰,因爲線程試圖寫入的屬性已被釋放。爲了解決這個問題,我想叫cancelPreviousPerformRequestsWithTarget
取消以前的請求,但它似乎並不奏效。以下是一些代碼片段。cancelPreviousPerformRequestWithTarget不取消我之前延遲的線程開始與performSelector
- (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秒後,如果我沒有在超時時間內讓我期望的準確度和我使用的是performSelector
做到這一點。用戶可以點擊視圖中的後退按鈕,這個線程仍然可以執行,即使我的所有屬性都已經釋放導致崩潰。
在此先感謝!
James