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ď č. 1Udrž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ý.