在下面的代码片段中,有三种类型的块。我的问题是哪个对象引用了每个块?(已启用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();
}发布于 2016-01-13 13:28:48
对于animateWithDuration:delay:options:animations:completion:,它会立即运行animations块。在方法返回后,没有对象存储对该块的强引用。它将completion块存储在某个未指定的位置。也许它被当前的CATransaction保留了下来。
在dispatch_async的情况下,队列保留块。
在myMethod:的情况下,没有对象存储对块的强(保留)引用。在调用期间,对该块的强引用存储在堆栈上。
https://stackoverflow.com/questions/34758816
复制相似问题