iOS performSelectorOnMainThread具有多个参数

McD*_*ott 41 arguments objective-c ios performselector

我想在另一个线程的主线程上执行一个选择器,但是选择器有多个参数,类似于:

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

我怎样才能使用它performSelectorOnMainThread: withObject: waitUntilDone:

编辑

我想解释一下为什么我需要这个.

我在主线程上使用UIImageViews,并在另一个线程上对它们进行计算.我使用了很多计算,所以如果我在主线程上创建所有内容,那么应用程序就会滞后.我知道UI元素只能在主线程上操作,这就是为什么我希望它以这种方式工作,所以主线程可以听到没有滞后的触摸事件.

Dar*_*ust 97

当你使用iOS> = 4时,你会这样做:

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

这就像做waitUntilDone:NO.如果要等到方法完成,请dispatch_sync改用.


Mac*_*ade 6

您需要使用NSInvocation

创建对象,设置目标,选择器和参数.
然后,使用

[ invocationObject performSelectorOnMainThread: @selector( invoke ) withObject: nil, waitUntilDone: NO ];
Run Code Online (Sandbox Code Playgroud)

  • 当然......但是如果没有GCD知道如何做到这一点可能会很方便,即使GCD现在是有效的首选方式.:) (3认同)