Man*_*mar 1 iphone objective-c objective-c-2.0 ios
在目标C中,我正在使我的程序等待使用while循环
doInitialize()
{
dispach_group_t loadDataGroup=dispatch_group_create();
dispatch_group_async(loadDataGroup,...get_global_queue(..),0),^{
renewauth();
}
dispatch_group_notify(loadDataGroup,...get_global_queue(..),0),^{
//Do other tasks once renew session has completed...
}
}
renewauth()
{
RenewAuthTokenInProgress=true;
startRenewThread();
**while (RenewAuthTokenInProgress);**
}
Run Code Online (Sandbox Code Playgroud)
反过来startRenewThread()函数也在里面执行dispatch_async操作.所以我必须让renewAuth()等一下.
一旦更新成功,startRenewThread中的异步任务将更新bool变量.
除了dispatch_groups之外,还有更好的方法吗?让其他线程等待while(true)语句是否好?
Manoj Kumar,
使用while循环等待,直到布尔变量更改不是解决问题的正确方法.以下是此方法的一些问题
您的CPU不一定要经常检查变量.
这将清楚地表明,开发人员没有太多的编码基本技能和语言功能.
如果由于任何原因你的变量永远不会改变,那么你的CPU将永远不会停止在while循环中检查bool的值并阻止在同一个线程上执行更多代码.
以下是一些正确的方法:
块或闭包:在RenewAuthToken完成时,使用块来异步执行代码.
代表:如果块难以理解,请使用委托并在完成RenewAuthToken后触发委托.
通知:在RenewAuthToken完成时需要响应的类中添加通知的观察者,并从asynctask中抛出通知并让类捕获它来执行代码.
锁:如果有必要阻止线程的执行,直到响应到来,使用锁来控制线程执行而不是使用while循环
编辑
正如fogmeister在评论中指出的那样
如果你用一个while(true)循环阻塞主线程太长时间,iOS应用程序实际上会终止app,因为它会认为它已经崩溃了
请查看链接:了解 fogmeister提供的iOS看门狗终止原因
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |