在iPhone SDK 4.0中,UIApplication
有一个新方法setKeepAliveTimeout:
,需要第二个void(^)(void)
类型的参数。
-(BOOL)setKeepAliveTimeout:(NSTimeInterval)timeout handler:(void(^)(void))keepAliveHandler
第二个参数的语法到底意味着什么,以及如何声明我可以传递给它的函数/处理程序?
FWIW以下不是它正在寻找的......
void SomeHandler( void )
{
}
答案 0 :(得分:23)
这是一个“块”,是Apple在Snow Leopard中添加的新功能。有关更多信息,请访问:
阻止对象
块对象(非正式地,“块”)是C的扩展,以及Objective-C和C ++,使程序员可以轻松定义自包含的工作单元。块与传统函数指针类似 - 但功能强大得多。关键的区别是:
块可以内联定义为“匿名函数”。 块捕获局部变量的只读副本,类似于其他语言中的“闭包” 这种功能在动态类型的解释语言中很常见,但以前从未被C程序员广泛使用。 Apple已根据MIT许可证发布了Blocks Languages Specification和我们的开源实现,增加了对GCC 4.2和clang的块支持,并已将其作为下一版C编程语言的一部分提交考虑。
语法
块变量看起来像一个函数指针,除了插入符号('^')而不是星号('*')。
void (^my_block)(void);
答案 1 :(得分:8)
该特定函数的代码如下所示:
[[UIApplication sharedApplication] setKeepAliveTimeout:5.0 handler:^{
NSLog( @"This is my timeout handler" );
}];
答案 2 :(得分:1)
这意味着需要一个块(代码,也就是封闭),请参阅http://developer.apple.com/mac/articles/cocoa/introblocksgcd.html 对于OSX 10.6和iOS 4来说,这些是Objective-c的新功能
答案 3 :(得分:0)
可以按如下方式屏蔽功能。
#if NS_BLOCKS_AVAILABLE
- (void)foo;
#endif