Я читаю документацию Xcode, и вот что меня озадачивает:
__block typeof(self) tmpSelf = self;
[self methodThatTakesABlock:^ {
[tmpSelf doSomething];
}];
В документации записано следующее:
Блок формирует сильную ссылку на переменные, которые он фиксирует. Если вы используете
selfвнутри блока, блок формирует сильную ссылку наself, поэтому, еслиselfтакже имеет сильную ссылку на блок (который обычно), получается сильный опорный цикл. Чтобы избежать цикла, вам нужно для создания слабой (или__block) ссылки на себя вне блока, так как в приведенном выше примере.
Я не понимаю, что означает "слабый (или __block)"?
Есть
__block typeof(self) tmpSelf = self;
и
__weak typeof(self) tmpSelf = self;
точно так же здесь?
Я нашел еще один фрагмент в документе:
Примечание. В среде сбора мусора, если вы применяете как
__weak, так и__blockдля переменной, тогда блок не гарантирует, что он будет сохранен.
Итак, я полностью озадачен.