如何确定Apple方法是否异步?

时间:2014-05-21 04:11:01

标签: objective-c cocoa debugging asynchronous cocoa-bindings

我正在使用mainQueueConcurrency将NSArrayController绑定到managedObjectContext。

我想做的就是使用我自己的函数修改arrangeObjects的排序属性,然后调用rearrangeObjects然后选择一些对象。

但看起来rearrangeObjects没有同步执行。

那么我怎么能以某种方式证明这一点呢?

这有效:

[self.myArrayController rearrangeObjects];

// Async needed -- I believe rearrange calls a fetch, which is async
dispatch_async(dispatch_get_main_queue(), ^{
    [self.myArrayController setSelectedObjects:anArray];
});

减去dispatch_async,它不起作用。选择不会发生。

我相信在NSArrayController上就像fetch一样, rearrangeObjects在下一次runloop迭代时调度自己。 **那么我该如何证明呢?我可以在那里抛出断点并检查阵列控制器等等。我有,我怀疑这是发生了什么。

但是有一些调试技巧会让它显而易见“Eureka!这行代码启动异步操作”??

**正是异步做某事的可可绑定。当然。 rearrangeObjects只是触发它。

1 个答案:

答案 0 :(得分:2)

我能够通过在可疑的代码行之前断开并在GCD dispatch_async函数上启用符号断点来捕获rearrangeObjects(通过绑定): < / p>

symbolic breakpoints on dispatch_async*

确实,dispatch_async_f符号断点已停在dispatch_async_f行:

breakpoint activated on rearrangeObjects