0
我正在用一個小的Swift應用程序玩轉。用戶可以通過點擊應用程序菜單中的「新建」來創建任意數量的實例。Swift:addObserverForName的usingBlock中可能的removeObserver循環引用
應用程序委託包含鍵入爲MainWindowController的數組。爲了從主窗口控制器陣列中刪除控制器,將監視窗口的NSWindowWillCloseNotification的。
現在的問題是,如果觀察者的去除是做正確 - 我擔心有可能是一個循環參考觀察者,但我不知道如何測試爲:
class ApplicationDelegate: NSObject, NSApplicationDelegate {
private let notificationCenter = NSNotificationCenter.defaultCenter()
private var mainWindowControllers = [MainWindowController]()
func newWindow() {
let mainWindowController = MainWindowController()
let window = mainWindowController.window
var observer: AnyObject?
observer = notificationCenter.addObserverForName(NSWindowWillCloseNotification,
object: window,
queue: nil) { (_) in
// remove the controller from self.mainWindowControllers
self.mainWindowControllers = self.mainWindowControllers.filter() {
$0 !== mainWindowController
}
// remove the observer for this mainWindowController.window
self.notificationCenter.removeObserver(observer!)
}
mainWindowControllers.append(mainWindowController)
}
}
謝謝您的關注。我的問題實際上是如何測試是否有循環參考,但我必須說我的措辭不夠具體 - 我的不好。 我在_notificationCenter.debugDescription_中用_NSWindowWillCloseNotification_過濾掉了行,我找到了一種方法來測試它。 – Eliott