Как я могу определить, являются ли методы Apple асинхронными?

Я связываю NSArrayController с managedObjectContext с mainQueueConcurrency.

Все, что я хочу сделать, это изменить свойства sort аранжированных объектов с помощью моей собственной функции, а затем вызвать 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не работает Выбор не происходит.

Я вполне уверен, что как fetch на NSArrayController, rearrangeObjectsпланирует себя на следующую итерацию runloop.** Так как мне доказать это? Я могу добавить точки останова и проверить контроллер массива и т. Д. И так, и я подозреваю, что так и происходит.

Но есть ли какая-то хитрость для отладки, которая бы сделала очевидным: "Эврика! Эта строка кода запускает асинхронную операцию"??

** Это были привязки какао, которые делают что-то асинхронно. Конечно. RerangeObjects просто вызывает его.

1 ответ

Решение

Я смог поймать rearrangeObjects ссылающееся dispatch_async_f (через привязки), разрывая непосредственно перед подозрительной строкой кода и включая символические точки останова в функциях dispatch_async GCD:

символические точки останова на dispatch_async

И, конечно же, dispatch_async_f символическая точка останова остановлена ​​на rearrangeObjects линия:

Точка останова активирована на перестановке объектов

Другие вопросы по тегам