Objective-C ARC: strong vs retain и weak vs assign

Есть два новых атрибута управления памятью для свойств, введенных ARC, strong и weak.

Кроме copy, который, очевидно, является чем-то совершенно другим, есть ли различия между strong vs retain и weak vs assign?

Насколько я понимаю, разница здесь только в том, что weak присвоит указателю nil, а assign - нет, что означает, что программа аварийно завершит работу, когда я пошлю сообщение указателю после его освобождения. Но если я использую weak, этого никогда не произойдет, потому что отправка сообщения на nil ничего не даст.

Я не знаю о каких-либо различиях между strong и retain.

Есть ли причины, по которым я должен использовать assign и retain в новых проектах, или они вроде как устарели?

365
задан swiftBoy 1 April 2016 в 08:32
поделиться