Your -isMainThread method is an instance method, which suggests that it tells you if the receiver is the main thread. But it does not -- it returns whether the current thread is the main thread, regardless of what the receiver is.

Since you do not use the receiver at all, you should change it to a class method: +isMainThread, to aleviate the confusion.

To correctly implement a -isMainThread method that tests if the receiver is the main thread, simply change [NSThread mainThread] to self:
- (BOOL)isMainThread
{
return [self isEqual:[NSThread mainThread]];
}