Нужно ли использовать __weak self внутри UIAnimationBlocks в ARC?

Нужно ли нам использовать __weak self внутри блоков UIAnimation, как указано ниже? Создаст ли это проблему сохранения цикла, если мы не указываем себя как слабого?

[UIView animateWithDuration:animationDuration 
                      delay:0 
                    options:UIViewAnimationCurveEaseInOut 
                 animations:^{
        [self doSomething];
    } completion:^(BOOL finished) {
        if (finished) {
            [self doSomething];
        }
    }];

Я также запутался в следующем сценарии. Есть мысли по этому поводу? Пожалуйста, поделитесь своими комментариями.

[self.navController dismissViewControllerAnimated:animated 
                                       completion:^{
                                                      [self doSomething];
                                                  }];

Должны ли мы использовать слабое я здесь?

3 ответа

Решение

Это не удерживающий цикл. Сохранение цикла будет

self -> block -> self

В этом случае мы имеем

animation framework -> block
block -> self

где первое сохранение является только временным - блок освобождается, когда заканчивается анимация. Даже если цикл сохранения произойдет, он будет только временным и не помешает освобождению объекта.

Вам нужно использовать __weak когда сохранить цикл возможно. Это не тот случай, потому что блок анимации не сохраняется самостоятельно.

Другая ситуация для использования __weak это длительное действие, которое вызовет наш блок после завершения и self может быть освобожден во время этого действия. Например, некоторый сетевой запрос вызовет обновление интерфейса для нашего контроллера представления в блоке завершения. Пользователь может выйти из нашего экрана во время запроса. В этой ситуации нет необходимости сохранять self с блоком лучше использовать слабое Я. Но использование анимационных блоков тоже не такая ситуация.

Нет, это не создаст цикл сохранения, потому что блок (замыкание) не прикреплен к self,
Для получения дополнительной информации, пожалуйста, проверьте автоматический подсчет ссылок Apple.

Другие вопросы по тегам