ios - RestKit 完成 block 是否在主 UI 线程上运行?

标签 ios multithreading restkit

我的代码告诉我它是通过 [NSThread currentThread] isMainThread] 以及我也可以显示 UIAlertView 的事实。这似乎出乎意料,因为我的理解是请求是异步发送的。

我会加入一些相关代码,但没什么特别的。我通过 RKObjectManager POST 对象,successfailure 完成 block 在主 UI 线程上执行(甚至虽然我肯定在请求完成后在后台做一些事情)。

我很困惑。

这是怎么回事?

最佳答案

RKObjectManager 在幕后创建并发送一个 RKObjectRequestOperation(本质上代表您的 POST 请求)到 NSOperationQueue 中以执行所有网络并在后台线程中异步映射内容。

当请求完成并处理响应时 - 默认行为是在主线程上运行 successfailure 回调。这是一个很好的快速设置,可以帮助您非常快速和轻松地构建应用程序(而不用担心在正确的线程上更新 UI)。

您可以轻松更改该行为,RKObjectRequestOperation 有 2 个属性,successCallbackQueuefailureCallbackQueue,您可以将它们设置为另一个后台线程,然后当您需要在 UI 端更改某些内容时,只需将更改包装到一个 block 中并发布到主队列:

    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
    }];

关于ios - RestKit 完成 block 是否在主 UI 线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809891/

相关文章:

ios - 两个 UIButton 形成一个具有渐变颜色,另一个具有边框和圆角

java - 在有效的java第2项72中实现CountDownLatch的更好方法是什么?

ios - RestKit - 使用 CoreData 映射实体 - 响应错误

ios - 通过拖放将 CocoaLumberjack 集成到 iOS 项目中

iphone - 如何在应用每启动三次后显示弹出窗口?

ios - 如何在 ARKit 中的 SCNPlane 上渲染具有透明背景的 UIView?

ios - 回到前台引用对plist文件的写入操作时,Adobe iOS SDK崩溃

c++ - 线程上的 Boost.Asio 并发问题

ios - 找不到 RestKit.h 的错误

objective-c - 使用 Restkit 为核心数据创建临时对象的更好方法