我看一下GCD,来自c ++,以这种方式编写代码是很自然的:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while(YES) {
if(<condition>) {
/* here I need to call a delegate */
}
sleep(1);
}
});
这是在objective-c线程中执行循环的正确方法吗?
试图理解,我正在寻找Reachability框架,我想启动一个后台线程来持续检查连接状态,但我不能理解&#34;循环&#34;。
基本上我在核心数据上保存了N个对象。当所有这些对象都设置了它的属性&#34; online&#34;如果是,我需要发起通知或委托。
答案 0 :(得分:0)
你可以使用计时器来进行递归。或者您可以使用具有延迟间隔的递归线程。 ARC behavior within a recursive block可以提供帮助。
答案 1 :(得分:0)
我想这取决于你的代码将要做什么。最好等一下像NSNotification这样的东西,而不是轮询你的情况,但是如果你别无选择,那就好了。
答案 2 :(得分:0)
很少需要在其中创建一个带有运行循环的新持久线程
如果需要在特定线程上创建一些操作,并且这些操作需要使用委托与其他对象进行通信,则需要新的持久运行循环。
例如,如果你想在后台线程上执行所有NSURLConnection,一旦你在后台线程上启动连接,因为NSURLConnection基于委托,线程将在到达该方法结束后立即关闭,你将松开所有的回调。
正如我所说,它非常罕见,而且有点复杂
GCD概念与线程非常不同,是GCD决定在线程或其他线程上执行阻止
外面有很多可达性版本,据我记得,它们都没有使用特定的线程,一个使用串行队列,但请记住,队列和线程实际上是不同的概念。
回到你的片段我从来没有见过这样的块,我认为是错的,GCD将管理线程的存在而你不需要创建一个运行循环。
也许如果你在问题中添加更多规范,我会更有帮助。