5

我有一个 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 的答案的示例。在我在后台执行方法的类中,我有一个指向我的进度条的指针。我们认为这行得通吗?(请注意对 EDIT 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. 
}
4

3 回答 3

10

这取决于你在做什么。您是否使用 GCD 在后台执行任务?然后你可以简单地调用:

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

如果你在 NSThread 中运行,你可以这样做:

[myObject performSelectorOnMainThread:YOURSELECTOR withObject:YOUROBJECT waitUntilDone:NO];
于 2012-10-17T11:41:42.513 回答
4

您可以使用NSObjectperformSelectorOnMainThread:withObject:waitUntilDone:的方法。

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

于 2012-10-17T11:41:18.843 回答
0

NSNotificationCenter允许线程之间的消息传递。您设置了一个“侦听器”,然后可以广播通知 - Apple 文档非常好,而且很容易上手。

于 2012-10-17T11:40:40.233 回答