我想从另一个线程在主线程上执行选择器,但是选择器具有多个参数,类似于以下内容:

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

我该如何处理 performSelectorOnMainThread: withObject: waitUntilDone:?

编辑

我想解释为什么我需要这个。

我正在主线程上使用UIImageViews,并且在另一个线程上为它们进行计算。我使用大量计算,因此,如果我在主线程上进行所有内容,则应用程序滞后。我知道UI元素只能在主线程上操纵,这就是为什么我希望它能这样工作,因此主线程可以听取触摸事件而没有滞后。

有帮助吗?

解决方案

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

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

就像在做 waitUntilDone:NO. 。如果要等到方法完成,请使用 dispatch_sync 反而。

其他提示

您需要使用 NSINEVOCATION

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

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

您可以传递具有所需参数的nsdictionary/nsarray类型的一个对象。

并接受您功能中相同类型的对象。然后,分解值并进行处理。

您必须将nsnumber用于数字值,以将它们添加到nsarray/nsdictionary,然后在您的功能中添加它们,您可以使用它们来转换它们 intValue/floatValue ETC

最好的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top