Кстати, я не понимаю, почему
Потому что нет таблички, где запоминаются все викрефы чтоб их обнулить при деаллокации. Так что вместо этого, викреф смотрит в аллокацию и находит там стронг каунт. Если он ноль, то значение читать нельзя и викреф самовыпиливается.