如何在Objective c中使用线程

时间:2014-01-21 08:59:35

标签: objective-c multithreading

当我的应用程序启动时,我需要使用一个线程在后台执行一些操作。

因此具有以下功能,我怎么能在后台运行它?

-(void) performOperationInBackground{
//Call to other functions
}

3 个答案:

答案 0 :(得分:4)

由于没有专门回答问题而被拒绝投票的风险,对于OS X和iOS开发,通常不鼓励使用线程:

  

OS X和iOS都采用了更加异步的执行方法   并发任务比传统上基于线程的任务更多   系统和应用程序。而不是直接创建线程,   应用程序只需定义特定任务然后让系统   执行它们。通过让系统管理线程,应用程序   获得原始线程无法实现的可伸缩性级别。应用   开发人员也可以获得更简单,更高效的编程模型。

请参阅Apple的Concurrency Programming Guide

取决于线程,您将使用操作队列或调度队列,具体取决于方案。

无论你如何做,最好像Black Pixel的performSelectorOnMainThread vs. dispatch_async文章所描述的那样保持一致。

答案 1 :(得分:2)

试试这个:

[self performSelectorInBackground:@selector(performOperationInBackground) withObject:nil];

答案 2 :(得分:1)

你可以这样做:

dispatch_async(dispatch_get_main_queue(), ^{

    [self performOperationInBackground];
});

但请记住,如果在此操作之后您需要更新UI,则必须在主线程中执行,因此在此之后:

-(void) performOperationInBackground {

   //do anything in background

   //call method for update user interface in the Main Thread
   [self performSelectorOnMainThread:@selector(updateUI) withObject:Nil waitUntilDone:YES];

}

-(void)updateUI {

    //update user interface
}