【发布时间】:2015-04-14 19:27:23
【问题描述】:
我想知道下面两个表达式有什么区别?
foregroundNotification = NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationWillEnterForegroundNotification, object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: {
(notification:NSNotification!) -> Void in
// do something
})
和(unowned self):
foregroundNotification = NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationWillEnterForegroundNotification, object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: {
[unowned self] (notification:NSNotification!) -> Void in
// do something
})
【问题讨论】:
-
您应该阅读“Swift 编程语言”中的“解决闭包的强引用循环”一章。它解释了这是做什么以及为什么这样做。
-
unowned表示仅对self的弱引用,因此您阻止不会创建强保留周期。 -
@holex no,
weak表示它是对self的弱引用。unowned表示它是对 self 的无主引用。它们并不相同,尽管它们都用于避免保留循环。 -
@AirspeedVelocity,实际上你是完全正确的,它在技术上不是一个 weak 参考。
-
@AirspeedVelocity
weak和unowned有什么区别?
标签: objective-c iphone swift