UIViewController dismissViewControllerAnimated完成参数类型语法

时间:2011-11-05 16:38:50

标签: objective-c uiviewcontroller ios5

UIViewController方法实现的'completion'参数类型的void (^)(void)语法:

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

引起了我的好奇心,我无法找到任何文件。请有人帮忙解释一下它的目的/含义吗?

非常感谢提前。

2 个答案:

答案 0 :(得分:12)

以下是我书中块的讨论:

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];
                        }];

完成块采用一个参数,一个名为“done”的BOOL,但其代码不使用它。我们的想法是执行动画,然后运行完成块中的代码。

熟悉积木是非常重要的,因为它们是未来的方式。例如,iOS 4中的视图动画使用它们,如我书中“基于块的视图动画”部分所述(首先阅读旧方法,然后阅读有关新iOS 4的方法):

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

在iOS 5中,块更重要;越来越多的情况下它们不是可选的。

块也是使用GCD(大中央调度)的方式,这是远程执行多线程的最佳方式。

答案 1 :(得分:3)

这将是一个完成块。块是一段代码,可以作为参数(通常在这里看到,用于完成处理)提交给API。块有许多功能,包括引用内存和维护状态的能力。

请参阅Obj-C日益流行的功能文档: http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html

块提供了可能被认为是回调行为的东西(通常通过委托或通知实现),但是它们允许程序员在与启动动作相同的上下文中包含完成行为的逻辑,使代码更具表现力并传达简明扼要地完成预期行为的进展。