Подсчет ссылок себя в блоках - PullRequest
3 голосов
/ 22 марта 2011

Я пытаюсь понять, как время жизни объекта и счетчик ссылок взаимодействуют с блоками кода.В следующем коде я просто делаю простую анимацию, которая мигает при смене вида сверху на стек UINavigationController.Сложность в том, что контроллер всплывающего представления - это тот, где этот код определен .

[UIView animateWithDuration:0.2 
        animations:^{self.navigationController.view.alpha = 0.0;}
        completion:^(BOOL finished){ 
                UINavigationController *navController = self.navigationController;  

                [self.navigationController popViewControllerAnimated:NO]; 
                [navController pushViewController:nextView animated:NO];
                [nextView release];

                [UIView animateWithDuration:0.2 
                        animations:^{navController.view.alpha = 1.0;}];                    
                 }];    

Мой вопрос (игнорируя, как выглядит анимация), это правильный путь?сделать это с точки зрения управления памятью.В частности:

(1) Правильно ли использовать этот подход для цикла pop + push, что больше нет необходимости сохранять себя, как в других подобных примерах , которые неиспользовать блоки?

(2) Сохраняет ли при вызове animateWithDuration: ... с этими блоками определяющий контроллер представления (self) до тех пор, пока блоки не будут выполнены?

1 Ответ

5 голосов
/ 07 апреля 2011

(1) При использовании этого подхода цикл pop + push, правильно ли, что больше нет необходимости сохранять себя, как в других подобных примерах, которые не используют блоки?

Это правильно. Эти блоки автоматически сохраняют себя, navController и nextView, если nextView является локальной переменной.

(2) Сохраняет ли вызов animateWithDuration: ... с этими блоками определяющий контроллер представления (self) до тех пор, пока блоки не будут выполнены?

Этим методом эти блоки копируются в кучу из стека. И эти блоки освобождаются после исполнения. А затем self, navController и nextView освобождаются из этих блоков.

...