Каково использование атрибута unsafe_unretained?

Я знаю определение unsafe_unretained .

Поэтому я не ожидаю, что кто-нибудь напишет свое определение.

Я хочу знать его использование с примером и как он работает с управлением памятью .

unsafe_unretained существует только в ARC. Он работает как assign в MRC. Эти свойства не будут сохранены. Усушно, вы бы не использовали такие свойства для делегатов, потому что им не нужен владелец, который их сохраняет.

weak свойства подобны unsafe_unretained только, что они работают немного умнее. Когда объект, назначенный для свойства, освобождается, слабая ссылка автоматически становится nil чтобы избежать сбоев при отправке сообщений этому объекту (его адрес памяти). Небезопасные свойства не делают этого. Они всегда будут привязаны к адресу памяти (если вы не измените его вручную), независимо от объекта, связанного с этим адресом. Слабые ссылки могут предотвратить аварии в таком случае, но результат все равно не будет таким, как ожидалось. Если ваш код хорошо написан и организован, этого не должно произойти.

Итак, почему вы использовали unsafe_unretained вместо weak ? Слабые ссылки доступны только на iOS 5 и выше, поэтому, если вы создаете приложение ARC для таргетинга на iOS 4, вам нужно использовать свойства unsafe_unretained . И опять же, отправка сообщений в освобожденное свойство не является чем-то, что вы хотите иметь в любом коде, поэтому, если ваш код хорошо организован, тогда у вас не должно быть никаких проблем с этим.

Ранее в ARC можно было указать делегат или другое свойство reference-to-parent в качестве assign для предотвращения циклов сохранения. С введением ARC и новых компиляторов вы вместо этого используете unsafe_unretained .

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

Попробуйте это: Понимание управления памятью в ARC

Давайте будем гением компьютера.