Como posso determinar se os methods da Apple são asynchronouss?

Eu estou ligando um NSArrayController para um managedObjectContext com mainQueueConcurrency.

Tudo o que eu quero fazer é modificar as propriedades de ordenação do arrangedObjects com a minha própria function e depois chamar rearrangeObjects e depois selecionar alguns objects.

Mas parece que o rearrangeObjects não é executado de forma síncrona.

Então, como posso provar isso, de um jeito ou de outro?

Isso funciona:

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

Menos o dispatch_async , não funciona. A seleção não acontece.

Estou bastante convencido de que, como em um NSArrayController, o rearrangeObjects está agendando-se na próxima iteração de runloop. ** Então, como eu provo isso? Eu posso jogar pontos de interrupção lá e examinar o controlador de matriz, etc etc. E eu tenho, e eu suspeito que é o que está acontecendo.

Mas existe algum truque de debugging que apenas tornaria óbvio “Eureka! Esta linha de código está iniciando uma operação assíncrona“?

** Foram as ligações de cacau que estão fazendo algo de forma assíncrona. Claro. rearrangeObjects apenas aciona isso.

Eu era capaz de capturar rearrangeObjects invocando dispatch_async_f (através de ligações) quebrando um pouco antes da suspeita linha de código e habilitando pontos de interrupção simbólicos nas funções GCD dispatch_async:

breakpoints simbólicos em dispatch_async *

E, com certeza, o breakpoint simbólico dispatch_async_f parou na linha rearrangeObjects :

ponto de interrupção ativado em rearrangeObjects