【问题标题】:Mac OS X application slows down when its window has not focusMac OS X 应用程序在其窗口没有焦点时变慢
【发布时间】:2015-07-10 11:46:54
【问题描述】:

我正在使用 XCode 6.1 开发带有 SWIFT 和 ObjC 的 MAC OS X 应用程序。 该应用程序是一个服务器,它在主线程运行循环中使用 CFSocketRef。

当应用程序窗口没有焦点时,应用程序会变慢,服务器会延迟接收来自客户端的消息。

这是正常的吗(没有焦点的应用程序会变慢)? 如果正常,有没有办法设置主线程优先级,以便在应用没有焦点的情况下继续以相同的方式运行?

【问题讨论】:

  • 这可能是因为优胜美地的“App Nap”。似乎您可以通过使用 beginActivityWithOptions: developer.apple.com/library/mac/documentation/Cocoa/Reference/… 来防止这种情况,但我无法给出真正的答案,因为我从未在我的应用程序中实际使用过它。
  • 好的,谢谢!我会在您发布的链接上阅读文档!
  • 谢谢埃里克!这是 App Nap,我在代码中添加了 beginActivityWithOptions。
  • 不客气。如果您愿意,可以发布您自己对这个问题的答案,解释您为使其发挥作用所做的工作。我相信它对其他人会有所帮助,并且有一个工作示例肯定会对我有所帮助。 :)

标签: objective-c xcode macos swift osx-yosemite


【解决方案1】:

在我的控制器类中,我在awakeFromNib 函数中添加了beginActivityWithOptions,而不是在applicationWillTerminate 中添加了endActivity,如下所示

class ConsoleController: NSObject
{
  var process : NSProcessInfo?
  var activity: NSObjectProtocol?
  override func awakeFromNib()
  {
    process = NSProcessInfo.processInfo()
    activity = process!.beginActivityWithOptions(NSActivityOptions.UserInitiated, reason: "Good")
  }
  func applicationWillTerminate(notification: NSNotification)
  {
    process!.endActivity(activity!)
  }
}

【讨论】:

  • Swift5: activity = ProcessInfo.processInfo.beginActivity(options: .userInitiated, reason: "Good")
猜你喜欢
  • 2012-03-16
  • 1970-01-01
  • 2018-10-03
  • 2021-12-13
  • 2011-11-19
  • 2011-07-26
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
相关资源
最近更新 更多