iOS performselectoronmainthread複数の引数を持つ
-
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
代わりは。
他のヒント
使用する必要があります nsinvocation
オブジェクトを作成し、ターゲット、セレクター、および引数を設定します。
次に、使用します
[ invocationObject performSelectorOnMainThread: @selector( invoke ) withObject: nil, waitUntilDone: NO ];
必要な引数を持つNSDictionary/NSARRAYタイプの1つのオブジェクトを渡すことができます。
関数に同じタイプのオブジェクトを受け入れます。次に、値を分解し、処理を続行します。
NSARRAY/nsDictionaryに追加するには、数値にnsNumberを使用する必要があります。 intValue
/floatValue
等
最高の金。