В чем разница между takeUnretainedValue и takeRetainedValue?
В чем разница между takeUnretainedValue
а также takeRetainedValue
? На основании документации Apple:
Оба эти метода возвращают исходный, развернутый тип объекта. Вы выбираете, какой метод использовать, в зависимости от того, возвращает ли вызываемый вами API необработанный или сохраненный объект.
Но как я узнаю, является ли неуправляемый объект незавершенным или оставленным объектом? Например, метод ABAddressBookCreateWithOptions:
от AddressBook
Framework возвращает неуправляемый объект ABAddressBook
, что некоторые учебники рассматривают это как сохраненный объект. Когда используешь ALAsset
, метод thumbnail
возвращает неуправляемый объект CGImage
, что некоторые учебники рассматривают это как неотдерживаемый объект.
Я буду признателен за вашу помощь.
1 ответ
как я узнаю, является ли неуправляемый объект незавершенным или оставленным объектом?
Это зависит от того, какой API вы используете.
Здесь есть несколько соглашений: Руководство по программированию управления полисом / памятью для Core Foundation
В основном, если имя функции содержит слово "Создать" или "Копировать", используйте .takeRetainedValue()
, Если имя функции содержит слово "Get", используйте .takeUnretainedValue()
,
И, если он не содержит либо, насколько я знаю, мы все еще можем использовать .takeUnretainedValue()
почти во всех случаях.
Однако каждое правило имеет исключение:), например, смотрите:
Быстрое выделение и печать UnsafeMutablePointer