It is one of those things that SHOULD be documented in the documentation, but isn’t always.
The way I came to find out was that I noticed the table view wasn’t updating very quickly. At first, I thought it was because the changes might take awhile to sync with the server, so I put an NSLog before and after the Core Data call to perform the merge. Turns out, the merge was completing well before the table view was reloaded. Which led me to the next piece of information: the table view was being told to reload and it took nearly 5 seconds for the table view to appear reloaded. The application couldn’t have been stalling during the reloadData method, because it was responding to events. Thus, the reloadData must have been happening on another thread. I logged the currentThread and the mainThread from within the method that performed the merge and sure enough, the notification was being delivered on a different thread.
Most of the time, the documentation will tell you. Other times, you might have to sense around a bit. You can check out NSThread to see some important methods for determining this stuff.