【问题标题】:Application does not respond应用程序没有响应
【发布时间】:2014-02-28 07:43:48
【问题描述】:

我有一种方法可以使用 lame 将 iTunes 上选定的歌曲编码为 mp3。现在我从名为“Encode”的 IBAction 中调用它。编码时,应用程序无法进入无响应状态。编码完成后,应用程序返回。 我想解决这个没有响应的状态。你能教我应该如何接近吗?

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    我猜您正在主线程上进行编码,这就是您的应用程序变得无响应的原因。您可能需要阅读有关threading 和concurrency 的文章以解决您的问题。

    raywenderlich.com 上也有介绍,叫"Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial"。

    【讨论】:

    • 感谢您的回答。有了你的回答,我就知道了异步处理,叫做 Operation Queue。
    【解决方案2】:

    您需要在不同于主线程的线程上调度它。否则它将阻塞应用程序的 GUI 部分运行的主线程。

    这是一个如何做到这一点的例子。但是,如果要修改块外的变量,请小心。您可能需要查找 __block 关键字。

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    
        // INSERT CODE HERE
    
    });
    

    【讨论】:

    • 感谢您的回答。我发现你的答案是 GCD。另一方面,我发现了使用操作队列的方式,使用 NSOperationQueue。如果你教我哪个更好,我将不胜感激。
    • 现在我找到了问题的答案,gcd 或 NSOperation。这是网址:stackoverflow.com/questions/10373331/…
    • 我从未研究过 NSOperationQueue(我相信这是一个相当新的东西),但绝对在我的名单上。也许其他人可以提供帮助?
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多