NSObject protocol doesn't include performSelectorOnMainThread: withObject: waitUntilDone: method

It appears that having your protocol conform to the NSObject protocol (@protocol MyProtocol <NSObject>) won't help you if you need to send performSelectorOnMainThread:withObject:waitUntilDone: messages to objects that conform to it (e.g., id myObj;). That's because the NSObject protocol doesn't declare that method.

Instead, declare the type of your objects as NSObject conforming to your protocol like this:

NSObject  *myObj;