我正在开发类似iPhone的应用程序,我正面临一个问题"。
我收到了联机或离线联系人的活动,但我不知道这些更新何时开始或结束。 我知道通常连接事件将在前一个事件之后不超过0.2秒。无论如何,如果它来得晚,我真的不在乎。
当我将所有事件分组后,我会更新我的tableview以显示联系人的新状态。 (一旦我收到连接事件,我之前就更新了我的tableview,但现在我开始处理很多联系人了,这不再合适了)
鉴于缺少开始/结束更新信息,我设置了一个基于计时器的检查系统,其执行如下:
- (void)connectionStatusEventReceivedForContact:(Contact *)aContact {
if (!isUpdating) {
[self willStartToUpdateContacts];
}
newUpdateReceived = TRUE;
NSIndexPath *indexPathToUpdate = [delegate indexPathOfContact:aContact];
if (indexPathToUpdate != nil && ![indexPathsOfContactToUpdate containsObject:indexPathToUpdate]) {
[indexPathsOfContactToUpdate addObject:indexPathToUpdate];
}
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(newUpdateReceived:) userInfo:nil repeats:NO];
}
- (void)willStartToUpdateContacts {
isUpdating = TRUE;
}
- (void)newUpdateReceived:(id)sender {
[self isLastUpdate:nil];
[NSTimer scheduledTimerWithTimeInterval:0.6 target:self selector:@selector(updateNewUpdateBoolean:) userInfo:nil repeats:NO];
}
- (void)updateNewUpdateBoolean:(id)sender {
newUpdateReceived = FALSE;
lastUpdateTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(isLastUpdate:) userInfo:nil repeats:NO];
}
- (void)isLastUpdate:(id)sender {
if (!newUpdateReceived) {
[self didUpdateContacts];
}
newUpdateReceived = TRUE;
}
你可以看到有点棘手,我担心的是当我有500个联系人时,会安排1001个计时器。这并不是一个好的解决方案。我正在考虑如何做到这一点,但还没有找到我真正喜欢的解决方案。 我相信你们中的某些人会帮我找到更好的解决方案:D
谢谢你们
答案 0 :(得分:1)
也许您可以排队收到的任何通知,并且有一个运行的计时器(可能每隔几秒)并更新自上次触发以来收到的所有/所有通知。
通过这种方式,您可以使用单个计时器获得相当好的响应能力。