Я читал документацию по адресу __block variables и думал о случаях, когда я использую __block. Мне, кажется, что мне нужно в двух случаях:Почему переменные __block не сохраняются (в среде, отличной от ARC)?
- Чтобы пометить переменную как для чтения и записи при использовании в блоке
- Чтобы избежать сохранения циклов при обращении себя в блоке
На первый взгляд это не похоже, что эти две вещи связаны. Я считаю, что переменные __block не сохраняются как еще один трюк, который мне нужно запомнить для конкретного случая использования избегающих циклов сохранения.
Мне интересно, существует ли более важная архитектурная причина, почему их нельзя сохранять? Я бы подумал, что другое ключевое слово, чтобы указать на это, может быть более ясным, чтобы не смешивать две функции, перечисленные выше.
обновление -
Я должен упомянуть, что это код, который не использует ARC. Теперь я вижу, что переменные __block фактически сохраняются в ARC.
Вы используете только '__block' для первого. Вы используете '__weak', а не' __block', чтобы избежать циклов сохранения. – rmaddy
Также вы поняли, что переменные __block не сохраняются? ARC сохранит их для вас автоматически, как обычные переменные. –
До ARC переменные __block действительно не сохранялись как механизм, чтобы избежать циклов сохранения. Это было изменено с помощью ARC и описано в примечаниях к выпуску Transitioning to ARC. –