42

別のスレッドからメインスレッドでセレクターを実行したいのですが、セレクターには次のような複数の引数があります。

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

どうすればこれを動作させることができperformSelectorOnMainThread: withObject: waitUntilDone:ますか?

編集

なぜこれが必要なのかを説明したいと思います。

私はメイン スレッドで UIImageViews を使用しており、別のスレッドでそれらの計算を行います。私は多くの計算を使用するので、メイン スレッドですべてを作成すると、アプリが遅くなります。UI要素はメインスレッドでのみ操作できることを知っています。これが、メインスレッドが遅延なしでタッチイベントをリッスンできるように、このように動作させたい理由です。

4

3 に答える 3

100

iOS> = 4を使用している場合は、代わりに次のようにします。

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

それはやっているようなものwaitUntilDone:NOです。メソッドが終了するまで待ちたい場合は、dispatch_sync代わりにを使用してください。

于 2011-11-30T13:13:50.137 に答える
7

NSInvocationを使用する必要があります

オブジェクトを作成し、ターゲット、セレクター、および引数を設定します。
次に、使用します

[ invocationObject performSelectorOnMainThread: @selector( invoke ) withObject: nil, waitUntilDone: NO ];
于 2011-11-30T13:12:44.943 に答える
3

必要な引数を持つ NSDictionary/NSArray タイプのオブジェクトを 1 つ渡すことができます。

関数で同じタイプのオブジェクトを受け入れます。次に、値を分解して処理を続行します。

数値を NSarray/NSDictionary に追加するために NSNumber を使用する必要があり、後で関数でそれらを元に戻すことができますintValue/ floatValueetc

最高のバック。

于 2011-11-30T13:13:26.377 に答える