gpt4 book ai didi

ios - 在 block 之间传递值类型

转载 作者:行者123 更新时间:2023-11-28 22:38:54 26 4
gpt4 key购买 nike

据我所知,可以使用 __block 修饰符使对象在 block (和队列?)之间可用。

-(void)performRequest: (void (^)(NSArray* outcome))completion
{
dispatch_async(dispatch_get_global_queue(0,0), ^{
// do some request

__block NSArray * result = [[NSArray alloc]init]; //Outcome of the request.

completion(result);
});
}

假设完成 block 将在主线程上 dispatch_async

我想应该可以在没有 __block 标识符的情况下使用值类型来做到这一点。我说得对吗?

-(void)performRequest: (void (^)(int outcome))completion
{
dispatch_async(dispatch_get_global_queue(0,0), ^{
// do some request

int result = 10; //Outcome of the request.

completion(result);
});
}

最佳答案

在您的第一个代码片段中使用 __block 是完全没有意义的。

__block 的全部目的是让值在另一个 block 中捕获时保持可变。您没有在任何地方捕获 result

请注意,在 MRR 下,__block 具有阻止捕获 block 保留值的副作用,使其成为打破保留循环的常用方法。在 ARC 下,这不是真的。如果您需要避免保留循环,则需要使用 __unsafe_unretained__weak 值。也就是说,这些都不适用于您提供的代码片段。

关于ios - 在 block 之间传递值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122140/

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