UIViewController dismissViewControllerAnimated Синтаксис типа аргумента завершения - PullRequest
6 голосов
/ 05 ноября 2011

Синтаксис void (^)(void) типа аргумента «завершение», реализованный методом UIViewController:

- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion

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

Большое спасибо заранее.

Ответы [ 2 ]

12 голосов
/ 05 ноября 2011

Вот обсуждение блоков из моей книги:

http://www.apeth.com/iOSBook/ch03.html#_blocks

Там есть пример, но вот пример, который ближе к тому, о чем вы спрашиваете:

[self transitionFromViewController:fromvc
                  toViewController:tovc
                          duration:0.4
                           options:UIViewAnimationOptionTransitionFlipFromLeft
                        animations:nil
                        completion:^(BOOL done){
                            [tovc didMoveToParentViewController:self];
                            [fromvc removeFromParentViewController];
                        }];

Блок завершения принимает один параметр, BOOL, называемый «done», но он не используется его кодом.Идея состоит в том, что анимация выполняется, а затем запускается код в блоке завершения.

Очень важно чувствовать себя комфортно с блоками, потому что они - путь будущего.Например, анимация вида в iOS 4 использует их, как описано в разделе «Анимация вида на основе блоков» моей книги (сначала прочитайте о старом, а затем о новом способе iOS 4):

http://www.apeth.com/iOSBook/ch17.html#_view_animation

В iOS 5 блоки еще важнее;появляется все больше и больше ситуаций, в которых они не являются обязательными.

Кроме того, блоки - это способ использовать GCD (грандиозная центральная диспетчеризация), который является бесспорным лучшим способом сделать многопоточность.

3 голосов
/ 05 ноября 2011

Это было бы для блока завершения.Блок - это фрагмент кода, который может быть передан в качестве аргумента (часто рассматривается, как здесь, для обработки завершения) в API.Есть много особенностей блоков, в том числе возможность ссылаться на память и поддерживать состояние.

См. Документацию по этой все более популярной функции Obj-C: http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html

Блоки предоставляют то, что можно считать поведением обратного вызова (обычно достигается с помощью делегирования или уведомления), но позволяют программистуВключите логику поведения завершения в том же контексте, что и инициирующее действие, делая код более выразительным и кратко передавая полную последовательность предполагаемого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...