2012-05-05 6 views
2

このmethonは本当にクールです:メインスレッドの引数の数でメソッドを実行する最も簡単な方法は何ですか?

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

しかし、私のようなメインスレッドで引数の数を持つメソッドを実行するために、それのような単純なものが必要:

- (void)methodWithFirstObject: secondObject:

最も簡単な方法は何ですかこれをする?

答えて

2

performSelectorOnMainThread GDCで遊んでの便利な方法ですNSOperationで遊んだけの便利な方法です。さらに機能が必要な場合は、次のレベルにドロップしてください。あなたはもう少し複雑さを管理する必要がありますが、より柔軟性があります。ココアは非常にたくさんこのように設計されています。

あなたはwaitUntilDoneになりたい場合はdispatch_async()への呼び出し

NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ 
    [self myMethod:foo thatRequiresMultiple:bar andAlso:baz]; 
}]; 

[[NSOperationQueue mainQueue] addOperation:operation]; 
3

引数としてNSDictionaryオブジェクトを使用してください。

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: 
    @"value1", @"arg1", @"value2", @"arg2", nil]; 

argを渡す。

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; 
1

あなたがread up on NSOperationしたいと思うが、私は、これはあなたがやりたいだろうと思い、[自分の携帯電話上のタイピング、をコンパイルしていません] NO、またはYESためdispatch_sync()

dispatch_async(dispatch_get_main_queue(), ^{ 
    [reciever methodWithFirstObject:obj1 secondObject:obj2]; 
}); 

ちょうどあなたがすでにオンしている場合dispatch_sync()を使用しないでくださいメインスレッド。必要に応じてdispatch_get_current_queue()の結果をテストすることができます。

関連する問題