Это то, что я часто делаю в функциях обновления элементов интерфейса:
-(void)functionModifyingUIelements:(id)object
{
// fire itself in main thread if it is not in it already
if (![[NSThread currentThread] isMainThread]) {
[self performSelectorOnMainThread:@selector(functionModifyingUIelements:) withObject:object waitUntilDone:NO];
return;
}
}