谁能解释该块语法的工作原理?
AStreamBuilder stream_builder = [ [ ^( void )
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
} copy ] autorelease ];
return stream_builder;
这里的街区叫什么名字?为什么要复制该块然后将其自动释放?我对这里发生的事情感到困惑。据说该块返回AStreamBuilder,但是在该块的主体内部它返回一个NSInputStream实例。
任何人都可以分解吗?
最佳答案
这是块:
^( void )
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
}
它不接收任何参数(因此为
(void)
),并且返回NSInputStream
的实例。请注意,它没有“名称”,例如:[[NSNumber alloc] initWithInt:42];
也没有“名称”。
由于块是在堆栈上创建的,因此如果需要返回一个块,则必须将其从堆栈复制到堆中(因此
-copy
)。这是一个拥有的对象;为了返回调用者不拥有的对象,该代码块会自动释放(因此-autorelease
):[ [ ^( void )
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
} copy ] autorelease ];
因此,上面的摘录是一个自动释放的块,该块已从堆栈复制到堆中。它被分配给一个变量
AStreamBuilder stream_builder = …
因此
AStreamBuilder
可能是没有参数且返回类型为typedef
(或与之兼容的类型)的块的NSInputStream
。请注意,AStreamBuilder
是一种块类型,与该块返回的值的类型相反。就像是:typedef NSInputStream * (^AStreamBuilder)(void);
关于Objective-C块语法-有人可以解释吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6392626/