Я читаю документацию 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
для переменной, тогда блок не гарантирует, что он будет сохранен.
Итак, я полностью озадачен.