There isn't a problem with adding an asynchronous block on the main queue from within the main queue, all it does is run the method later on in the run loop.
What you definitely don't want to do is to call dispatch_sync
adding a block to the main queue from within the main queue as you'll end up locking yourself.