如何将对象添加到NSPointerArray?

时间:2015-07-02 17:32:57

标签: ios swift nspointerarray

我想在NSPointerArray中存储弱引用,但是我收到错误:

public var objectWithReloadFRC = NSPointerArray(options: NSPointerFunctionsWeakMemory)
objectWithReloadFRC.addPointer(self) //self is an UIViewController subclass

enter image description here

也尝试了这个:

objectWithReloadFRC.addPointer(UnsafePointer(self)

2 个答案:

答案 0 :(得分:6)

您可以获取指向用于对象的存储的指针 unsafeAddressOf()。由于addPointer()需要可变指针, 需要进行另一次转换:

objectWithReloadFRC.addPointer(UnsafeMutablePointer(unsafeAddressOf(self)))

斯威夫特3:

var objectWithReloadFRC = NSPointerArray(options: .weakMemory)
objectWithReloadFRC.addPointer(Unmanaged.passUnretained(self).toOpaque())

答案 1 :(得分:-1)

在进入只会让您头疼的区域之前,只需创建一个包含对象弱引用的包装类,然后将包装类的实例添加到普通数组中,NSPointerArray在Objective-中已经足够糟糕了C,在斯威夫特,这是一场噩梦。它无论如何都不处理弱引用,只是不安全的未保留。这意味着如果对象消失,它将不会设置为nil,它将在您检索它时崩溃。