【发布时间】:2017-02-26 16:46:16
【问题描述】:
我最近发现了NSMapTable(doc,nshipster),我一直想知道它是否可以用来代替关联对象。
这是一个使用标准关联对象的示例:
var fooKey = "foo"
extension UIView {
var foo: UIImage? {
set {
objc_setAssociatedObject(self, &fooKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
get {
return objc_getAssociatedObject(self, &fooKey) as? UIImage
}
}
}
相对于使用NSMapTable的实现:
let barTable = NSMapTable<UIView, UIImage>(keyOptions: [.weakMemory], valueOptions: [.strongMemory])
extension UIView {
var bar: UIImage? {
get {
return barTable.object(forKey: self)
}
set {
barTable.setObject(newValue, forKey: self)
}
}
}
我试图用谷歌搜索并理解其中的差异,但没有运气,因为我什至不知道如何比较这两种实现。
如何比较它们?有什么区别?
谢谢
【问题讨论】:
-
bbum 的回答给出了这两者之间区别的一个例子,但要得到一个特定于您需求的答案,您将不得不给出一些更具体的用例示例——为什么您首先需要关联对象吗?
-
现在没什么具体的,我只是想了解技术差异以及如何比较这两种方法。