在后台和主线程 ios 中执行

Posted

技术标签:

【中文标题】在后台和主线程 ios 中执行【英文标题】:execution in background and main thread ios 【发布时间】:2011-03-07 07:08:31 【问题描述】:

我有一个函数 foo(),它在后台线程上调用函数 bar foo()

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

 bar()

//some initialsations
//calling another function
bar1();//also in background
 //after bar1() returns
 //marking following statement with *       
      [self performSelectorOnMainThread:@selector(stopActivityIndicator:)withObject:nil     wailUntilDone:YES];

  

bar() 在调用另一个函数之前会做一些事情。 bar() 所做的一切都在后台。同时,我正在展示 ActivityIndi​​cator。一旦 bar() 中的函数返回,我将调用一个将在 MainThread 上停止ActivityIndi​​cator 的函数。

现在,我想在调用 stopActivityIndi​​cator() 之前调用 MainThread 中的另一个函数 我该怎么做? 我可以再发一个[self performSelectorOnMainThread:@selector(functionIWantToCall:)withObject:nil wailUntilDone:YES]; * 之前?

【问题讨论】:

【参考方案1】:

您可以调度一个块在主线程上运行,并将您需要的任何代码放入该块中:

[[NSOperationQueue mainQueue] addOperationWithBlock:^ 

   // Code here
   NSLog(@"This is the main thread");

];

使用您的代码,会变成:

bar()

    bar1();

    [[NSOperationQueue mainQueue] addOperationWithBlock:^ 
        [stopActivityIndidator];
        [functionIWant];
    ];

【讨论】:

以上是关于在后台和主线程 ios 中执行的主要内容,如果未能解决你的问题,请参考以下文章

iOS 主线程和主队列

什么是后台线程、前台线程和主线程?

Java中main()方法和主线程有啥关系?

在后台线程执行硬任务,在主线程返回结果

如何防止主线程ios杀死后台线程

Core Data 3 托管对象上下文