Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我应该为在后台运行的无限循环使用委托吗?_Ios_Objective C_Loops_Delegates - Fatal编程技术网

Ios 我应该为在后台运行的无限循环使用委托吗?

Ios 我应该为在后台运行的无限循环使用委托吗?,ios,objective-c,loops,delegates,Ios,Objective C,Loops,Delegates,我想让一个应用程序在给定的时间间隔(比如5秒)内重复执行HTTP GET请求,并使用响应更新某些内容(比如视图标签)。但是这应该独立于用户正在做的事情来运行。这样做的适当方式是什么?我目前唯一的想法是创建一个这样做的类,并让视图控制器将该类用作委托。然而,我对iOS还相当陌生,我怀疑我是否走对了这条路。有什么建议吗?谢谢! 使用NSTimer: [NSTimer scheduledTimerWithTimeInterval:5.0

我想让一个应用程序在给定的时间间隔(比如5秒)内重复执行HTTP GET请求,并使用响应更新某些内容(比如视图标签)。但是这应该独立于用户正在做的事情来运行。这样做的适当方式是什么?我目前唯一的想法是创建一个这样做的类,并让视图控制器将该类用作委托。然而,我对iOS还相当陌生,我怀疑我是否走对了这条路。有什么建议吗?谢谢!

使用NSTimer:

[NSTimer scheduledTimerWithTimeInterval:5.0
                                 target:self
                               selector:@selector(HTTPRequest:)
                               userInfo:nil
                                repeats:YES];
这将每5.0秒调用一次HTTPRequest方法

在给定的时间间隔内重复…将执行HTTP GET请求和更新

这就是所谓的投票,这是你应该尽可能避免的事情。避免这种情况的最好方法之一是让服务器在发生变化时告诉您,而不是不断地询问。这正是我们设计的目的。通知将显著减少应用程序发出的网络请求数量,从而节省电池电量和用户的数据计划

因此,如果您可以管理它,使用推送通知而不是轮询。主要的例外是,如果您知道每次请求时您正在检索的内容都会发生更改,您自己无法计算新值,并且您知道用户实际上关心看到每个新值

这应该独立于用户正在做的事情运行

如果您对信息所做的唯一一件事就是更新显示,那么它真的不应该独立于用户所做的事情来运行。如果您每五秒钟发出一次请求,那么每分钟就有12个不必要的请求,即用户除了查看请求的结果之外正在做其他事情。我可以看到拥有一个总是能获得当前信息的对象的吸引力,但这在电池电量和数据传输方面是有实际成本的。(这也会给服务器带来不必要的高负载。)


只有当用户可能会使用数据时,才获取数据要好得多。

太好了!那么NSTimer到底在这里干什么?当一个对象调用NSTimer时,它会创建一个单独的线程吗?我想我也可以自己查一下这部分,现在我知道该找什么了……虽然另一个答案实际上给出了我所要求的解决方案,但这也是非常好的建议。现在我可能会使用轮询来测试一些简单的事情,但是我会确保在做更严肃的事情时尝试使用推送通知。谢谢