gpt4 book ai didi

swift - NSMapTable WeakMemory 在 Swift2.0 中不起作用?

转载 作者:搜寻专家 更新时间:2023-11-01 06:43:22 24 4
gpt4 key购买 nike

当我尝试在 swift 2.0 中使用 NSMapTable 时,似乎弱内存选项不起作用。这是我的测试代码:

class TestClass {
var a: String
required init(a: String) {
self.a = a
}
}

var table = NSMapTable.strongToWeakObjectsMapTable()

var test: TestClass? = TestClass(a:"name")

table.setObject(test, forKey: "a")

if let object = table.objectForKey("a") {
print(object)
} else {
print("nil")
}

test = nil

if let test = test {
print("test")
} else {
print("nil")
}

if let object = table.objectForKey("a"), let aa = object as? TestClass {
print(object)
print(aa.a)
} else {
print("nil")
}

在我将 test 设置为 nil ("test = nil") 之后,表不会为键“a”返回 nil。控制台输出如下:

TestClass
nil
TestClass
name

我也用 Objective-C 尝试过 NSMapTable,它工作正常。

我错过了什么吗?还是swift2.0中NSMapTable的bug?

最佳答案

NSMapTable 如果存在弱-弱、弱-强或强-弱绑定(bind),有时不会释放键和对象。

如果您查看 NSMapTable.h,您会发现 Apple 已经提到:回收弱 key 时不一定会立即清除条目

就是说,如果您在下面尝试,它应该会立即释放引用。

var table = NSMapTable(keyOptions: .WeakMemory, valueOptions: .WeakMemory)

关于swift - NSMapTable WeakMemory 在 Swift2.0 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com