/ / Aká je škoda udržať seba v bloku?

Čo je to škoda, že si udržať seba v bloku? (Objective-C, GCD) - objektív-c, objektív-c-bloky, grand-central-dispatch

V mnohých sprievodcoch o tom, ako používať bloky a GCD, sa vždy hovorí o jednom tipe: nezachovajte sa v bloku.

Detail je pri definovaní bloku, ak sa odvolávate na seba alebo na samo seba, potom je blok blokovaný. Takže práca okolo je použitie __block modifikátor získať weakSelf alebo weakIvar.

Ale čo je to škoda, že to neurobíme? Ak blok zostane sám, mal by sa sám uvoľniť, keď je blok hotový (mám v tom pravdu?). V konečnom dôsledku je teda referenčný počet seba vyrovnaný. Viem, že ak si blok udržiava blok a blok si zachováva seba, bol by to cyklus udržania. Blok ani ja nebudú rozdané. Ale ak používate GCD, nezachovávam blok, prečo nenechať blok udržiavať seba?

odpovede:

8 pre odpoveď č. 1

Udržanie sebapoškodzovania nie je na škode, pokiaľblok zostáva. Ak používate GCD na vykonanie bloku a potom je odstránený, je to v poriadku. Problém je len vtedy, ak má vlastne odkaz na blok, ktorý udržuje (t. J self.someBlock = ^{self.x = 2;}), pretože potom máte cyklus udržania.

Osobne sa mi páči blok udržujúci seba (akpoužité) v GCD, pretože nemáte žiadnu skutočnú kontrolu nad tým, kedy sa blok spustí, a nemožno ho zrušiť, takže sa môže spustiť až po tom, čo je blokovaný, ak nie je zachovaný.