Ios 实现从express.js服务器到Objective-C移动应用程序的数据自动加载

Ios 实现从express.js服务器到Objective-C移动应用程序的数据自动加载,ios,node.js,objective-c,xcode,Ios,Node.js,Objective C,Xcode,我有一个用Objective-C编写的应用程序,需要从node.js服务器自动加载一些数据 应用程序1向我的服务器发送应用程序2需要接收的消息。应用程序2需要自动加载此消息(无刷新按钮)。这些消息是公共数据,而不是APN的远程通知 我目前使用以下方法: - (void) checkForNewMessages { // call the method on a background thread dispatch_async(dispatch_get_global_queue(DI

我有一个用Objective-C编写的应用程序,需要从node.js服务器自动加载一些数据

应用程序1向我的服务器发送应用程序2需要接收的消息。应用程序2需要自动加载此消息(无刷新按钮)。这些消息是公共数据,而不是APN的远程通知

我目前使用以下方法:

- (void) checkForNewMessages {

   // call the method on a background thread
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       [self->dataParser getMessages:^(NSArray *arr, NSError *error) {
           // If there's an error
           if (error) {
               return;
           }
           // otherwise
           [self->messageArray removeAllObjects];
           self-> messageArray = [NSMutableArray arrayWithArray:arr];
           if (self-> messageArray) { // is not nil
               // update UI on the main thread
               dispatch_async(dispatch_get_main_queue(), ^{
                   [self->newMessageTimer invalidate];
                   [self tableRefresh];
               });
           }
       }];
   });
}
它使用GET请求来提取消息(由一个重复10秒的计时器控制,该计时器在找到消息时失效)

我认为这可以在后台运行——但这已经变得相当麻烦,并且依赖于计时器——它还经常在请求发生时冻结UI,即使它应该在后台运行


从本质上讲,这类功能是否有更好的解决方案?或者这对于生产应用程序来说似乎完全有效。

使用
调度队列\u优先级\u默认值
可以让系统选择要使用的队列,有时还可以决定选择主队列,因为它足够自由。所以在您的情况下,最好明确指定您需要后台队列,如下所示

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
       [self->dataParser getMessages:^(NSArray *arr, NSError *error) {
       ...

是的,你已经拒绝了:)苹果免费给你APN。这是一个完美的用例-您可以向您的移动应用程序发送控制消息,告诉它运行HTTP GET请求。你也可以试着推出你自己的WebSocket,尽管这真的有点像PITA。最后,正如@Asperi所建议的,您并没有在您的应用程序中显式地请求backgorund队列code@zaitsman谢谢我将研究APN的可能性,因为我已经将其用于AppThank中的另一个功能了!我真的应该注意到这一点。我已经接受了答案,因为这解决了等待请求时UI冻结的问题。