Подтвердить что ты не робот

IOS выполняетSelectorOnMainThread с несколькими аргументами

Я хотел бы выполнить селектор основного потока из другого потока, но селектор имеет несколько аргументов, похожих на это:

-(void) doSomethingWith:(int) a b:(float)b c:(float)c d:(float)d e:(float)e { //... }

Как я могу заставить это работать с performSelectorOnMainThread: withObject: waitUntilDone:?

ИЗМЕНИТЬ

Я хотел бы объяснить, зачем мне это нужно.

Я работаю с UIImageViews в основном потоке, и я делаю вычисления для них в другом потоке. Я использую множество вычислений, поэтому, если я делаю все в основном потоке, приложение отстает. Я знаю, что элементы пользовательского интерфейса можно манипулировать только по основному потоку, поэтому я бы хотел, чтобы он работал таким образом, поэтому основной поток может прослушивать события касания без задержек.

4b9b3361

Ответ 1

Когда вы используете iOS >= 4, вы должны сделать это вместо:

dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething:1 b:2 c:3 d:4 e:5];
});

Это нравится делать waitUntilDone:NO. Если вы хотите дождаться завершения метода, используйте вместо него dispatch_sync.

Ответ 2

Вам понадобится NSInvocation

Создайте объект, установите цель, селектор и аргументы.
Затем используйте

[ invocationObject performSelectorOnMainThread: @selector( invoke ) withObject: nil, waitUntilDone: NO ];

Ответ 3

вы можете передать один объект типа NSDictionary/NSArray с необходимыми аргументами.

и принять тот же тип объекта в вашей функции. затем разложите значения и продолжайте обработку.

вам нужно использовать NSNumber для числовых значений для добавления их в NSarray/NSDictionary, а позже в вашей функции, вы можете преобразовать их обратно с помощью intValue/floatValue и т.д.

лучший из долларов.