iOS-Masonry block 不需要weakSelf

2018-02-27 11:14:18来源:https://www.jianshu.com/p/9540e2bdf242作者:linbj人点击

分享


block 调用self 有可能会导致循环引用,但是是否会引起循环引用你只要看函数内部是否copy了这个block就知道了.
创建的block在栈中使用完就释放了,生命周期不超出作用域,copy了就将block复制到堆中
查看Masonry mas_makeConstraints方法


- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
self.translatesAutoresizingMaskIntoConstraints = NO;
MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
block(constraintMaker);
return [constraintMaker install];
}

没有copy 使用完就释放了 是不会造成循环引用的.


在swift里有一个很好的雅称,中文翻译版叫非逃逸闭包。这个闭包只能在当前作用域里执行,不能超出。即无法将这个闭包异步调用或等待时机调用。这种闭包用完就被释放了,所以不会有引用循环之类的问题。


内部引用变量 self,进入block的是self.view,block调用了self,但self并没有调用block,所以不会循环引用








最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台