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