后台线程中的NSNotification - iOS

时间:2017-01-06 07:33:42

标签: ios objective-c multithreading delegates nsnotificationcenter

我正在开发使用委托方法接收消息的聊天应用程序。从委托方法,我调用NSNotification来更新UI中的消息。

//委托方法

- (void)didReceiveMessage:(XMPPMessage *)message{
     [[NSNotificationCenter defaultCenter]postNotificationName:@"MessageReceived"  object:nil userInfo:@{@"message":message}];
}

将为我收到的每条新消息调用上述委托方法。假设如果我同时收到大量消息,则会导致UI挂起。如果我为通知添加后台线程,那么它将为每个委托方法调用创建一个新线程。这不是一个好的解决方案。我该如何处理这种情况?

2 个答案:

答案 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。或者根据您的需要进行设置。