iOS-Masonry block 不需要weakSelf

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,所以不会循环引用

你可能感兴趣的:(iOS-Masonry block 不需要weakSelf)