You can do it anyway; you just need to document this well.
Some APIs will go to the main thread, some of the threads (or runloop) that you used to get started, and others provide no guarantees whatsoever. Some will even let you go into the GCD queue, which is used for all callbacks.
Remember that delegation / callback can be blocked for a non-trivial amount of time, so if your API needs to resume work as soon as possible, you will of course want to send it to another thread or queue.
Having said all this, if the performance is not critical for you or users of your API, I would go with the most convenient for the developer, which will be the main thread.
Mike weller
source share