Как добавить объект в 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, в Свифт это кошмар. В любом случае, он не обрабатывает слабые ссылки, только небезопасные и не сохраняются. Это означает, что если объект исчезнет, ​​он не будет установлен в ноль, он просто потерпит крах, когда вы получите его.

Другие вопросы по тегам