Ios 实现从express.js服务器到Objective-C移动应用程序的数据自动加载
我有一个用Objective-C编写的应用程序,需要从node.js服务器自动加载一些数据 应用程序1向我的服务器发送应用程序2需要接收的消息。应用程序2需要自动加载此消息(无刷新按钮)。这些消息是公共数据,而不是APN的远程通知 我目前使用以下方法: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
- (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冻结的问题。