iOS PerformSelectorOnthread具有多个参数
-
26-10-2019 - |
题
我想从另一个线程在主线程上执行选择器,但是选择器具有多个参数,类似于以下内容:
-(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
最好的。
不隶属于 StackOverflow