В чем разница между takeUnretainedValue и takeRetainedValue?

В чем разница между takeUnretainedValue а также takeRetainedValue? На основании документации Apple:

Оба эти метода возвращают исходный, развернутый тип объекта. Вы выбираете, какой метод использовать, в зависимости от того, возвращает ли вызываемый вами API необработанный или сохраненный объект.

Но как я узнаю, является ли неуправляемый объект незавершенным или оставленным объектом? Например, метод ABAddressBookCreateWithOptions: от AddressBook Framework возвращает неуправляемый объект ABAddressBook, что некоторые учебники рассматривают это как сохраненный объект. Когда используешь ALAsset, метод thumbnail возвращает неуправляемый объект CGImage, что некоторые учебники рассматривают это как неотдерживаемый объект.

Я буду признателен за вашу помощь.

1 ответ

Решение

как я узнаю, является ли неуправляемый объект незавершенным или оставленным объектом?

Это зависит от того, какой API вы используете.

Здесь есть несколько соглашений: Руководство по программированию управления полисом / памятью для Core Foundation

В основном, если имя функции содержит слово "Создать" или "Копировать", используйте .takeRetainedValue(), Если имя функции содержит слово "Get", используйте .takeUnretainedValue(),

И, если он не содержит либо, насколько я знаю, мы все еще можем использовать .takeUnretainedValue() почти во всех случаях.

Однако каждое правило имеет исключение:), например, смотрите:
Быстрое выделение и печать UnsafeMutablePointer?>;

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