在主线程上使用多个参数执行方法的最简单方法是什么?

时间:2012-05-05 12:59:36

标签: objective-c ios multithreading cocoa-touch

这种方法很酷:

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

但我需要一些像它一样简单的方法来执行主线程中带有多个参数的方法,如:

- (void)methodWithFirstObject: secondObject:

最简单的方法是什么?

3 个答案:

答案 0 :(得分:3)

使用NSDictionary对象作为参数。

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

在arg中传递dict。

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

答案 1 :(得分:2)

performSelectorOnMainThread只是一种使用NSOperation播放的便捷方式,这是与GDC一起玩的便捷方式。如果您需要更多功能,请下载到下一级别。您将需要管理更多的复杂性,但将具有更大的灵活性。这种方式设计了很多可可。

你会想要read up on NSOperation,但我认为这会做你想要的[在我的手机上打字,没有编译]

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

[[NSOperationQueue mainQueue] addOperation:operation];

答案 2 :(得分:1)

如果您希望dispatch_async()waitUntilDone,或NOdispatch_sync(),请致电YES

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

如果您已经在主线程上,请确保不要使用dispatch_sync();如有必要,您可以测试dispatch_get_current_queue()的结果。