Цель C - Вызов метода класса в основном потоке?

Как я могу вызвать CLASS METHOD в основном потоке? Что-то типа:

[SomeClass performSelectorOnMainThread:staticMethod withObject:nil];

Пожалуйста, не говорите мне создать обычный метод для вызова этого метода класса. Это было бы очевидным решением, но не чистым.

Спасибо


person aryaxt    schedule 12.04.2011    source источник
comment
Могу поспорить, что вы можете добиться этого с помощью NSInvocation. Но я не совсем уверен, так что просто комментарий.   -  person JustSid    schedule 13.04.2011


Ответы (2)


[SomeClass performSelectorOnMainThread:staticMethod withObject:nil waitUntilDone:NO];

Да, performSelectorOnMainThread:withObject:waitUntilDone: не является методом класса.

Да, это метод экземпляра на NSObject.

Да, все объекты Class являются экземплярами NSObject. (я не шучу!)


Вы также можете сделать:

dispatch_async(dispatch_get_main_queue(), ^{
  [SomeClass doClassyThingWithObject:object1 andDiddleyDoo:foo];
});
person Dave DeLong    schedule 12.04.2011
comment
спасибо, а что если я отправляю несколько параметров? скажем, метод [SomeClass staticMethodWithObject:a andOther:b orMore:c]; - person aryaxt; 13.04.2011
comment
@aryaxt, помимо упаковки параметров в NSArray, вам придется использовать другой механизм, например GCD (который я отредактировал свой ответ, чтобы показать). - person Dave DeLong; 13.04.2011

Как насчет:

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:[SomeClass class] selector:@selector(SomeClass) object:nil];
[[NSOperationQueue mainQueue] addOperation:operation];
person Aleksa    schedule 17.07.2012