Suppose that the main thread is busy (it doesn't cycle through its run loop for the moment) - then the +mainThread method gets blocked waiting. Suppose that, for some reason, the main thread will want to stay like this until some work is done in the detached thread (there may be for instance a lock it wants to acquire), but the detached thread is now blocked waiting for a selector to be executed on the main thread...

Just a hypothetical scenario, but anyway, I don't think this way of determining the main thread is a good idea. I would either use a different method or set the main thread static var beforehand (not very elegant).