일부 비동기 작업을 수행하는 메소드가 있다고 가정합니다. 사용자의 액세스 권한을 새로 고침하고 인터넷 연결 속도 등에 따라 몇 분이 걸릴 수도 있습니다.비동기 작업이 해당 메서드 자체에서 진행될 때 메서드에 대한 예약 된 호출을 건너 뛰는 방법은 무엇입니까?
제가
-(void)refreshPermission {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// do something that takes a few minutes
});
}
는 이제 timer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(refreshPermission) userInfo:nil repeats:YES];
이 메소드를 호출 (즉 예정된 통화 scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:
NSTimer
의 방법을 사용하여) 정기적으로이 방법을 호출해야한다. 즉,이 호출은 10 초마다 발생합니다. 내가해야 할 일은
내가,의 말 사용자의 액세스를 보자 어떻게 든 하나 (또는 둘 이상의) 뭔가가 비동기 블록 내에서 발생하는 경우이 방법 에 예정 호출 (을 건너 뛸 필요가있다 허가가 업데이트 됨).
그러나 블록이 완료되면
(이다 은, 사용자의 액세스 권한 업데이트되었습니다), 타이머 예정 전화는 다시 시작해야합니다.어떤 아이디어 또는 이것을 수행하는 방법에 대한 샘플 ??
음, 그건 영리한거야. 하지만 bool을 YES로 체크하고 설정하는 것은'dispatch_async' 블록 전에 수행되어야한다고 생각합니다. 권리? – nayem
그러나 작업 ** 완료 후'dispatch_async' 블록 내에'isExecuting = NO' 설정은 보장됩니까? – nayem
업데이트 된 대답이 효과가 있습니다. – Sunny