【发布时间】:2014-02-28 07:43:48
【问题描述】:
我有一种方法可以使用 lame 将 iTunes 上选定的歌曲编码为 mp3。现在我从名为“Encode”的 IBAction 中调用它。编码时,应用程序无法进入无响应状态。编码完成后,应用程序返回。 我想解决这个没有响应的状态。你能教我应该如何接近吗?
【问题讨论】:
标签: objective-c cocoa
我有一种方法可以使用 lame 将 iTunes 上选定的歌曲编码为 mp3。现在我从名为“Encode”的 IBAction 中调用它。编码时,应用程序无法进入无响应状态。编码完成后,应用程序返回。 我想解决这个没有响应的状态。你能教我应该如何接近吗?
【问题讨论】:
标签: objective-c cocoa
我猜您正在主线程上进行编码,这就是您的应用程序变得无响应的原因。您可能需要阅读有关threading 和concurrency 的文章以解决您的问题。
raywenderlich.com 上也有介绍,叫"Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial"。
【讨论】:
您需要在不同于主线程的线程上调度它。否则它将阻塞应用程序的 GUI 部分运行的主线程。
这是一个如何做到这一点的例子。但是,如果要修改块外的变量,请小心。您可能需要查找 __block 关键字。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// INSERT CODE HERE
});
【讨论】: