将消息从后台线程发送到iOS上的主线程

我有一个iOS应用程序,我正在后台线程完成任务。 随着每个任务完成,我想发送消息到主线程,以便我可以沿着我的自定义进度栏移动到适当的阶段。

什么是最简单但最安全的方法来实现这一点?

编辑1

这是我正在使用的方法:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) { // get background tasks done. [self.background backgroundMethod]; }); 

编辑2

这里是我试图用@ Madboy的答案的一个例子。 在我在后台执行方法的类中,我有一个指向我的进度条的指针。 我们认为这会起作用吗? (请注意更改也编辑1)。

 @implementation BackgroundClass @synthesize delegate; @synthesize customProgressBar - (void)backgroundMethod { // Run tasks } - (void)delegateSaysBackgroundMethodIsFinished { [self performSelectorOnMainThread:@selector(tasksDone:) withObject:self.customProgressBar waitUntilDone:NO]; } @implementation CustomProgressBar - (void)tasksDone { // change UI to reflect progress done. } 

这是基于你在做什么。 您是否使用GDC在后台执行任务? 那么你只需要打电话:

 dispatch_async(dispatch_get_main_queue(), ^{ //your main thread task here }); 

如果你正在运行一个NSThread,你可以这样做:

 [myObject performSelectorOnMainThread:YOURSELECTOR withObject:YOUROBJECT waitUntilDone:NO]; 

你可以使用NSObject的 performSelectorOnMainThread:withObject:waitUntilDone:方法。

waitUntilDone参数是一个布尔值。 你可以通过YES来让后台线程等到主线程上的方法完成。 您可以传递NO来仅仅触发该方法,并在主线程中同时在后台线程上继续执行。

NSNotificationCenter允许线程之间的消息传递。 你build立了一个“监听者”,然后可以播发通知 – 苹果文档非常好,并且很容易上手。