Майк Эш написал это введение в ARC , где он вводит что-то вроде:
__weak Foo *_weakFoo = [object foo];
Зачем мне делать это для локальной временной переменной? __weak - это ссылка обнуления, которая автоматически установит указатель _weakFoo на ноль, как только объект, на который указывает ссылка, будет освобожден. Кроме того, __weak доступен только в iOS> = 5.
Когда я столкнусь с проблемами, если просто сделаю это?:
Foo *_weakFoo = [object foo];
Всегда ожидается возврат объекта или nil. Я предполагаю следующее:
Foo *_weakFoo = [object foo];
[self doSomethingStupid]; // does something bad so foo gets deallocated
[_weakFoo doIt]; // CRASH! msg sent to deallocated instance 0x123456
Одна вещь, которая все еще беспокоит меня с ARC: когда он узнает, что мне больше не нужен объект? Я бы сказал, что когда я устанавливаю указатель на nil или на что-то еще, он выясняет, что ранее упомянутый объект больше не нужен этому владельцу и, следовательно, может быть удален. Но суть в том, что я установил ноль. Так что все равно ноль!
Так когда же __weak для локальной переменной имеет смысл и какие безумные вещи мне нужно делать где-то еще, чтобы это мне действительно нужно?