任何人都可以解释这个块的语法是如何工作的吗?Objective-C块语法 - 有人可以解释这一点吗?
AStreamBuilder stream_builder = [ [ ^(void)
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
} copy ] autorelease ];
return stream_builder;
这里的块名称是什么?为什么该块被复制,然后自动释放?我有点困惑这里发生了什么......该块据说返回AStreamBuilder,但在块体内返回一个NSInputStream的实例。
任何人都可以解决这个问题吗?
如果块要返回一个NSStream的实例,那么在上面的语法中怎么没有声明返回类型? – randombits
这是因为你看到的'void'不是返回值,而是参数。这个块没有任何参数。返回类型在这里没有指定。这是可以的,因为“[返回类型是可选的,并从返回语句中推断出来。](http://clang.llvm.org/docs/BlockLanguageSpec.txt)” – puzzle
@rand有两件事发生在那里:在一方面,正如拼图所说,返回类型是从返回语句中推断出来的。另一方面,'AStreamBuilder'是一个'typedef',它定义了块的返回类型。为使分配生效,推断的返回类型必须与'AStreamBuilder'中定义的返回类型相匹配。您可以在Xcode中右键单击并选择Jump to Definition来检查“AStreamBuilder”的声明。 – 2011-06-17 23:52:16