Przeczytałem dokumentację na __block variables i zastanawiając się nad przypadkami, w których używam __block. Dla mnie wydaje się, że muszę go w dwóch przypadkach:Dlaczego zmienne __block nie są zachowywane (w środowiskach innych niż ARC)?
- aby zaznaczyć zmienną do odczytu zapisu stosowany w bloku
- aby uniknąć zatrzymywania cykli po przedstawieniu siebie w bloku
Na powierzchni nie wydaje się, że te dwie rzeczy są ze sobą powiązane. Uważam, że zmienne __block nie są zachowywane jako więcej podstępu, który muszę zapamiętać w konkretnym przypadku unikania cykli zatrzymania.
Zastanawiam się, czy istnieje ważniejszy, architektoniczny powód, dla którego nie wolno ich zatrzymać? Sądzę, że inne słowo kluczowe wskazuje, że może to być bardziej jasne, ponieważ nie miesza dwóch wyżej wymienionych funkcji.
update -
należy wspomnieć, jest to kod, który nie korzysta z ARC. Teraz widzę, że zmienne __block są w rzeczywistości zachowywane w ARC.
Używa się tylko '__block' dla pierwszego. Używasz '__weak', a nie' __block', aby uniknąć cykli zatrzymania. – rmaddy
Ponadto, skąd wziął się pomysł, że zmienne __block nie są zachowywane? ARC zatrzyma je automatycznie, podobnie jak zwykłe zmienne. –
Przed ARC, zmienne __block nie zostały faktycznie zachowane jako mechanizm unikania cykli zatrzymania. To się zmieniło w ARC i jest udokumentowane w Uwagach do Przejścia do ARC. –