Calling a method on the main thread?

aryaxt picture aryaxt · Apr 9, 2011 · Viewed 78.6k times · Source

First of all I am writing code for iphone. I need to be able to call a method on the main thread without using performSelectorOnMainThread. The reason that I don't want to use performSelectorOnMainThread is that it causes problem when I am trying to create a mock for unit testing.

[self performSelectorOnMainThread:@Selector(doSomething) withObject:nil];

The problem is that my mock knows how to call doSomething but it doesn't know how to call performSelectorOnMainThread.

So Any solution?

Answer

aryaxt picture aryaxt · Apr 13, 2011

Objective-C

dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething];
});

Swift

DispatchQueue.main.async {
    self.doSomething()
}

Legacy Swift

dispatch_async(dispatch_get_main_queue()) {
    self.doSomething()
}