UIViewController dismissViewControllerAnimated completion 参数类型的语法

6
UIViewController方法实现的'completion'参数类型的语法为void (^)(void)
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion

这个东西引起了我的好奇心,但我找不到任何相关的文档。请问有人能帮忙解释一下它的用途/意义吗?

非常感谢。

2个回答

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(Grand Central Dispatch)的方式,这是迄今为止最好的执行多线程的方法。

谢谢马特,这看起来是一本很棒的书,您是否有iOS 5版本的计划呢?! - Andy Bowskill
1
@Eddie:我已经开始将所有可下载的示例转换为iOS 5:https://github.com/mattneub/Programming-iOS-4-Book-Examples/tree/master/convertedToIOS5更多信息即将到来... - matt

3
那是针对完成块的。块是一小段代码,可以作为参数提交给API(通常用于完成处理)。块有许多特性,包括引用内存和维护状态的能力。
请参阅Obj-C越来越流行的块特性的文档: http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html 块提供了可能被视为回调行为的功能(通常通过委托或通知实现),但它们允许程序员将完成行为的逻辑包含在启动操作的上下文中,使代码更具表现力,并简洁地传达预期行为的完整进展。

2
你可能想要补充说明,它非常有用于执行任何清理或启动其他需要在解雇后完成的操作。通常用作委托回调的替代。 - timthetoolman
谢谢Isaac,当块被介绍时,我简单地阅读了一下,但愚蠢地没有研究语法! - Andy Bowskill
@timthetoolman 给出了很好的建议。我已经扩展了答案,包括与Cocoa中其他常见完成处理机制的比较。 - isaac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接