首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁保留block?

谁保留block?
EN

Stack Overflow用户
提问于 2016-01-13 13:10:53
回答 1查看 41关注 0票数 0

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

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

发布于 2016-01-13 13:28:48

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34758816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档