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