Итак, у меня был проект, который поддерживал iOS 4, поэтому все мои IBOutlets были __unsafe_unretained
даже IBOutlets, которые были в nib, но вне основного представления контроллера (Separate View в том же nib) и все работало отлично.
Итак, пришло время, и теперь клиент хочет поддерживать только iOS 5, поэтому наша команда изменила все __unsafe_unretained
IBOutlets на __weak IBOutlets
, но теперь IBOutlets, которые не находятся внутри main view установлены на nil
(кроме viewdidload
), поэтому мы не можем добавить их позже.
Если подумать, то это имеет смысл, потому что если ни одно представление (основное представление) не сохраняет эти IBOutlets, они должны быть освобождены и обнулены (я не знаю, является ли это правильным словом), поэтому решение состоит в том, чтобы удалить __weak
из этих IBOutlets
Но что для меня не имеет смысла, так это Почему различное поведение между unsafe_unretained
и weak
, в моей голове unsafe_unretained
должны быть освобождены, и когда приложение пытается получить к ним доступ, они должны указывать на недопустимую ссылку, после чего приложение должно аварийно завершать работу.
Я думал, что unsafe__unretained — это то же самое, что и weak, но без обнуления.
Я что-то упустил?
Спасибо.