gpt4 book ai didi

iphone - 对具有未知延迟的后续事件进行分组

转载 作者:行者123 更新时间:2023-11-29 04:48:18 25 4
gpt4 key购买 nike

我正在开发一个类似 iPhone Skype 的应用程序,但我遇到了一个“问题”。

我收到了联系人在线或离线的事件,但我不知道这些更新何时开始或结束。我知道通常连接事件发生的时间不会超过前一个事件的 0.2 秒。不管怎样,如果晚点发生,我也不在乎。

当我将所有事件分组后,我会更新表格 View 以显示联系人的新状态。(以前我一收到连接事件就更新我的表格 View ,但现在我开始与很多联系人一起工作,这不再合适)

鉴于缺少开始/结束更新信息,我设置了一个基于计时器的检查系统,其执行如下操作:

- (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

谢谢大家

最佳答案

也许您可以将收到的所有通知排队,并有一个运行(可能每隔几秒)的计时器,并更新自上次触发以来收到的任何/所有通知。

这样您就可以使用单个计时器获得相当好的响应能力。

关于iphone - 对具有未知延迟的后续事件进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9297017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com