- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我尝试在 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/
我想弄清楚 NSMapTable 是如何工作的所以我在 Playground 上尝试以下代码: class Person { var name: String init(name: S
我正在尝试使用 NSMapTable 弱存储一些对象实例,由字符串索引。 (我的用例是存储一些有关远程服务器的缓存元数据,并让每个事件客户端共享该元数据。当没有客户端连接到该特定服务器时,应从内存中删
我有一个从弱到强的NSMapTable。当我尝试调用 removeObjectForKey:method 时,我的应用程序崩溃了。 代码如下:self.requestedObjectMap是一个从弱到
我想保留一个可变数组,其中包含对一组UIViews 的weak 引用。 NSMapTable 非常适合这种需求,除了一个细节...... NSMapTable 需要一个键来表示它所拥有的每个值。 是否
NSMapTable 是否与 NSMutableDictionary 相同,只是允许键为指针? 它在内存管理上有什么不同吗? 最佳答案 NSMapTable 比 NSDictionary 更灵活。虽然
我正在 Swift 中尝试类似的方法,但没有用。错误是:Type()不符合类型BooleanType //visibleCollectionReusableHeaderViews is of type
当我使用NSMapTable时,一个麻烦让我不开心,我这样做了 [self.map setObject:block forKey:key] 在 obj-c 中是可以的,但是当我这样做的时候 map.s
在 Swift 的早期版本中,我的 NSMapTable 中的键可以是字符串: let mapTable = NSMapTable(keyOptions: .StrongMemory, valueOp
这个问题在这里已经有了答案: Declare "NSMapTable StrongObject" in Swift 3 (1 个回答) 关闭 6 年前。 以下行给我编译器错误“无法推断通用参数‘Ke
当我尝试在 swift 2.0 中使用 NSMapTable 时,似乎弱内存选项不起作用。这是我的测试代码: class TestClass { var a: String requi
如何在 Swift 3 中声明一个 NSMapTable?为什么 Apple 的这个示例不起作用? let activeLines = NSMapTable.strongToStrongObjects
我在 iOS 6 项目的许多地方使用了 NSMapTable,并且希望能够使用新的字典下标样式来访问对象。 (NSMapTable 的行为主要类似于 NSMutableDictionary,但可以为其
我是一名优秀的程序员,十分优秀!