Различия между weak и unsafe_unretained

Итак, у меня был проект, который поддерживал iOS 4, поэтому все мои IBOutlets были __unsafe_unretainedдаже IBOutlets, которые были в nib, но вне основного представления контроллера (Separate View в том же nib) и все работало отлично.

Итак, пришло время, и теперь клиент хочет поддерживать только iOS 5, поэтому наша команда изменила все __unsafe_unretainedIBOutlets на __weak IBOutlets, но теперь IBOutlets, которые не находятся внутри main view установлены на nil(кроме viewdidload), поэтому мы не можем добавить их позже.

Если подумать, то это имеет смысл, потому что если ни одно представление (основное представление) не сохраняет эти IBOutlets, они должны быть освобождены и обнулены (я не знаю, является ли это правильным словом), поэтому решение состоит в том, чтобы удалить __weakиз этих IBOutlets

Но что для меня не имеет смысла, так это Почему различное поведение между unsafe_unretainedи weak, в моей голове unsafe_unretainedдолжны быть освобождены, и когда приложение пытается получить к ним доступ, они должны указывать на недопустимую ссылку, после чего приложение должно аварийно завершать работу.

Я думал, что unsafe__unretained — это то же самое, что и weak, но без обнуления.

Я что-то упустил?

Спасибо.

9
задан Donato Szilagyi 25 February 2013 в 08:54
поделиться