gpt4 book ai didi

Objective-C block 语法 - 有人可以解释一下吗?

转载 作者:太空狗 更新时间:2023-10-30 03:48:08 25 4
gpt4 key购买 nike

谁能解释一下这个 block 语法是如何工作的?

AStreamBuilder stream_builder = [ [ ^( void )
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
} copy ] autorelease ];
return stream_builder;

这里的方 block 叫什么名字?为什么 block 被复制然后自动释放?我对这里发生的事情有点困惑。据说该 block 返回 AStreamBuilder,但在 block 的主体内它返回 NSInputStream 的实例。

谁能分解一下?

最佳答案

这是 block :

^( void )
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
}

它不接收任何参数(因此 (void)),它返回 NSInputStream 的一个实例。请注意,它没有“名称”——在同样的意义上,例如:

[[NSNumber alloc] initWithInt:42];

也没有“名字”。

由于 block 是在堆栈上创建的,如果你需要返回一个 block ,那么你必须将它从堆栈复制到堆中(因此 -copy)。这是一个拥有的对象;为了返回一个不属于调用者的对象, block 被自动释放(因此 -autorelease):

[ [ ^( void )
{
// some more code..
return (NSInputStream *)[ NSInputStream inputStreamWithFileAtPath: some_path ];
} copy ] autorelease ];

所以上面的摘录是一个从栈复制到堆的自动释放 block 。它被分配给一个变量

AStreamBuilder stream_builder = …

因此 AStreamBuilder 很可能是一个 typedef 用于不接收任何参数并具有返回类型 NSInputStream(或与那)。请注意,AStreamBuilder 是 block 类型,而不是 block 返回值的类型。像这样的东西:

typedef NSInputStream * (^AStreamBuilder)(void);

关于Objective-C block 语法 - 有人可以解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6392626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com