Майк Эш написал это введение в ARC , где он вводит что-то вроде:
__weak Foo *_weakFoo = [object foo];
Зачем мне это делать для локальной временной переменной?__weak - это нулевая ссылка, которая автоматически устанавливает указатель _weakFoo на ноль, как только указанный объект освобождается.Кроме того, __weak доступен только в iOS> = 5.
Когда у меня возникнут проблемы, когда я просто сделаю это?:
Foo *_weakFoo = [object foo];
Это всегда ожидается, чтобы вернуть объект или ноль,Мое предположение таково:
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 для локальной переменной имел смысл, и какие сумасшедшие вещи я должен делать где-то еще, чтобы мне это действительно нужно?