我的代码告诉我这是通过[NSThread currentThread] isMainThread]
以及我可以展示UIAlertView
的事实。这看起来很意外,因为我的理解是请求是异步调度的。
我会抛出一些相关的代码,但没什么特别的。我POST
通过RKObjectManager
和success
和failure
完成块在主UI线程上执行{{1}}对象(即使我在请求后肯定在后台执行操作)完成)。
我很困惑。
发生了什么事?
答案 0 :(得分:7)
RKObjectManager
创建并发布RKObjectRequestOperation
(实质上是您的POST请求的表示)到NSOperationQueue
,以便在后台线程中异步执行所有网络和映射。
请求完成并处理响应时 - 默认行为是在主线程上运行success
或failure
回调。这是一个很好的快速设置,可以帮助您快速,轻松地构建应用程序(而不用担心在正确的线程上更新UI)。
您可以轻松更改该行为,RKObjectRequestOperation
有2个属性,successCallbackQueue
和failureCallbackQueue
,您可以将它们设置为另一个后台线程,然后当您需要更改某些内容时在UI方面,只需将该更改包装到一个块中并发布到主队列:
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
}];
答案 1 :(得分:4)
您希望请求的原因是异步调度的,因为您不希望请求阻止UI线程(主线程)。因为当它被阻止时,你的应用程序不会对用户的行为作出反应,这是一种糟糕的用户体验。
然后在请求完成后,您希望让用户知道它,因此调度的线程必须返回主线程。在你的情况下,这是完成块。那么你就可以在主线程上做一些show alert。
我希望这是你想要的答案。