무언가가 여러 번 새로 고침을 연속적으로 받으면 몇 가지 경우가 있습니다. 예 : - ViewController는 여러 KVO 알림을받습니다. - 여러 설정이 변경 될 때 새로 고침하도록 setter에서 호출되는 Datamanger 클래스입니다.데이터를 새로 고치기위한 호출을 대기열로 보내는 좋은 방법은 무엇입니까?
이상적으로 시리즈에서 마지막 새로 고침 호출 만 실행하고 싶습니다 (모든 중간 호출을 삭제하십시오).
- (id)init {
...
[self observeValueForKeyPath:@"isRefreshing" ....];
}
- (void)setParameter:(NSInteger)parameter {
....
[self refresh];
}
/* and many more kinds of updates require a refresh */
- (void)setAnotherProperty:(NSArray*)array {
....
[self refresh];
}
- (void)refresh {
if (self.isRefreshing) {
self.needRefresh = YES;
return;
}
self.isRefreshing = YES;
...
self.isRefreshing = NO;
}
- observeValueForKeyPath..... {
if (!self.isRefreshing && self.needsRefresh) {
self.needsRefresh = NO;
[self refresh];
}
}
는 이런 종류의 문제에 대한 더 나은 솔루션이 있습니까 :
은 지금 나는 isRefreshing 재산과 과도한 새로 고침을 차단하는 needRefresh, 예를 사용하고 있습니다?
감사를 지연하기 위해 비동기 블록을 사용할 수 있지만이 솔루션은 업데이트가 진행 중일 때 마지막 요청받은 삭제합니다. 하지만 지금은 디스패치 블록을 사용하고 있습니다. –