我正在开发使用委托方法接收消息的聊天应用程序。从委托方法,我调用NSNotification来更新UI中的消息。
//委托方法
- (void)didReceiveMessage:(XMPPMessage *)message{
[[NSNotificationCenter defaultCenter]postNotificationName:@"MessageReceived" object:nil userInfo:@{@"message":message}];
}
将为我收到的每条新消息调用上述委托方法。假设如果我同时收到大量消息,则会导致UI挂起。如果我为通知添加后台线程,那么它将为每个委托方法调用创建一个新线程。这不是一个好的解决方案。我该如何处理这种情况?
答案 0 :(得分:0)
您可以直接向负责更新UI的ViewController发送消息,而不是在收到消息后发布通知。例如
- (void)didReceiveMessage:(XMPPMessage *)message{
MessageListController *messageListController; //get reference as per your UI implementation
[messageListController updateUIWithMessage:message];
}
并且在updateUIWithMessage方法中,您可以编写优化代码来更新UI。
答案 1 :(得分:0)
您应该使用NSOperationQueue
并将其设为全局(类级别)。添加NSOperations
即可。
您可以使用maxConcurrentOperationCount
属性设置最大并发操作数。通过这种方式,您可以同时控制多个操作。但对于你的情况,我认为
maxConcurrentOperationCount = 1;
很好。因为您需要消息来逐个更改UI。或者根据您的需要进行设置。