Как добавить объект в NSPointerArray?
Я хочу хранить слабые ссылки в NSPointerArray
но я получаю ошибку:
public var objectWithReloadFRC = NSPointerArray(options: NSPointerFunctionsWeakMemory)
objectWithReloadFRC.addPointer(self) //self is an UIViewController subclass
попробовал это тоже:
objectWithReloadFRC.addPointer(UnsafePointer(self)
2 ответа
Решение
Вы можете получить указатель на хранилище, используемое для объекта сunsafeAddressOf()
, поскольку addPointer()
требуется изменяемый указатель, требуется другое преобразование:
objectWithReloadFRC.addPointer(UnsafeMutablePointer(unsafeAddressOf(self)))
Свифт 3:
var objectWithReloadFRC = NSPointerArray(options: .weakMemory)
objectWithReloadFRC.addPointer(Unmanaged.passUnretained(self).toOpaque())
Прежде чем перейти к областям, которые будут вызывать головную боль, просто создайте класс-оболочку, который содержит слабую ссылку на объект, и затем добавьте экземпляры класса-оболочки в обычный массив, NSPointerArray достаточно плох в Objective-C, в Свифт это кошмар. В любом случае, он не обрабатывает слабые ссылки, только небезопасные и не сохраняются. Это означает, что если объект исчезнет, он не будет установлен в ноль, он просто потерпит крах, когда вы получите его.