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)?

questionAnswers(9)

yourAnswerToTheQuestion