NSTimer를 무효로하는 이상한 문제가 있습니다. 사용자가 특정 화면에있는 한 지속적으로 업데이트해야합니다. NSTimer를 사용하여이를 수행합니다. viewDidLoad 메서드에서 아래 코드를 작성했습니다.뷰 수명주기에서 NSTimer를 무효화 할 위치는 어디입니까?
- (void)viewDidLoad {
self.pollServerForUpdates = [NSTimer scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(fetchNewDataFromServer:)
userInfo:nil
repeats:YES];
}
타이머를 무효화하려고하면 문제가 발생합니다. 사용자가 화면을 떠날 때 앱이 서버를 폴링하지 않게하려면 viewWillDisappear 메서드에 타이머 무효화 코드를 삽입합니다.
-(void) viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:YES];
//NSLog(@"%d",[self.view retainCount]);
[self.pollServerForUpdates invalidate];
self.pollServerForUpdates = nil;
}
내 메인보기와 폴링보기간에 앞뒤로 가기 위해 내비게이션 컨트롤러를 사용합니다. 기본보기와 폴링보기 사이를 빠르게 이동하면 앱이 다운됩니다. 나는 일이 뭐죠 볼 수 NSZombie을 활성화하고 이것이 내가 내 응용 프로그램이 잘 작동 타이머 무효화를 제거하면 내가
*** -[CALayer retainCount]: message sent to deallocated instance 0x1c3be0
을 얻을 것입니다. 하지만 사용자가 화면을 떠나 자마자 폴링 (타이머)을 중지하고 싶습니다.
보기가 해제되기 전에 타이머가 분할 된 것이므로이 문제가 발생한다고 생각합니다. 어떻게 피합니까? 디자인을 변경해야합니까? 어떤 도움을 주시면 감사하겠습니다.
p.s :이 화면에서 푸시 알림을 사용할 수 없습니다.
이 토피는 당신을 도울 수 있습니다 : http://stackoverflow.com/questions/1031554/nstimer-doesnt-stop – malinois