gpt4 book ai didi

ios - 谁保留 block ?

转载 作者:行者123 更新时间:2023-11-28 21:33:44 24 4
gpt4 key购买 nike

在下面的代码片段中,有三种类型的 block 。我的问题是哪个对象引用了每个 block ? (启用 ARC)

typedef void (^CompletedBlock)(void);

- (void)viewDidLoad {
[super viewDidLoad];

[UIView animateWithDuration:<#(NSTimeInterval)#>
delay:<#(NSTimeInterval)#>
options:<#(UIViewAnimationOptions)#>
animations:^{<#code#>}
completion:^(BOOL finished) {<#block 1#>}];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{<#block 2#>});

[self myMethod:^{<#block 3#>}];

}

- (void)myMethod:(CompletedBlock)completed
{
completed();
}

最佳答案

animateWithDuration:delay:options:animations:completion: 的情况下,它会立即运行 animations block 。方法返回后,没有对象存储对该 block 的强引用。它将 completion block 存储在某个未指定的地方。也许它被当前的 CATransaction 保留了。

dispatch_async 的情况下,队列保留 block 。

myMethod: 的情况下,没有对象存储对 block 的强(保留)引用。在调用期间,对该 block 的强引用存储在堆栈中。

关于ios - 谁保留 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758816/

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