Reter o ciclo no `self 'com blocos
Receio que essa pergunta seja bastante básica, mas acho que é relevante para muitos programadores de Objective-C que estão entrando em blocos.
O que ouvi é que, como os blocos capturam variáveis locais referenciadas dentro deles comoconst
cópias, usandoself
dentro de um bloco pode resultar em um ciclo de retenção, caso esse bloco seja copiado. Então, nós devemos usar__block
forçar o bloco a lidar diretamente comself
em vez de copiá-lo.
__block typeof(self) bself = self;
[someObject messageWithBlock:^{ [bself doSomething]; }];
em vez de apenas
[someObject messageWithBlock:^{ [self doSomething]; }];
O que eu gostaria de saber é o seguinte: se isso for verdade, existe uma maneira de evitar a feiura (além de usar o GC)?