我正在创建一个用于在状态栏上显示CPU温度的应用程序(连续),并且我遇到了内存问题。请考虑以下摘录:
func statusBarInit() {
statusBarItem = statusBar.statusItemWithLength(NSVariableStatusItemLength)
statusBarItem.button?.title = "0"
}
// Function called through an NSTimer:
func updateTemperature() {
var temperature = String(getTemperature())
statusBarItem.button?.title = "\(temperature)" // Problem
// statusBarItem.button?.title = "Fixed string" // Problem too.
}
我从applicationDidFinishLaunching
创建计时器:
timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: #selector(AppDelegate.updateTemperature), userInfo: nil, repeats: true)
问题在于statusBarItem.button?.title
的分配导致内存使用量增加,每分钟300 KB的逐步递增(逐步,不连续),这可以从Activity Monitor仪器和Memory调试窗格中看出。但是,泄漏检测仪器没有检测到任何泄漏。
我可以说这个错误不是由getTemperature()函数引起的,因为如果我用一个固定字符串设置statusBarItem.button?.title
(并注释掉getTemperature()
的调用),问题仍然存在。没有任何字符串赋值给statusBarItem.button.title
,没有问题。
也许定时器频率(100)太快?实际上,温度采样代码在给定的时间段内正常工作。
其他代码如下:
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var statusBar = NSStatusBar.systemStatusBar()
var statusBarItem : NSStatusItem = NSStatusItem()
...
}