objective-c - 關於Masonry為什麼不會造成循環引用的問題
高洛峰
高洛峰 2017-05-02 09:30:40
0
1
678

程式碼舉個例子,我不知道自己的理解對不對。

[self.view mas_makeConstraints:^(MASConstraintMaker *make) {
    make.centerY.equalTo(self.otherView.mas_centerY);
}];

block中持有了self,但是self.view並沒有持有這個block,因為看到Masonry的源碼是這樣的:

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

它只是block(constrainMaker)。如果改成了self.block = block(constrainMaker),那麼view是不是也持有了block呢

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(1)
我想大声告诉你

並不是 block 就一定會造成循環引用,是不是循環引用要看是不是互相持有強引用。 block 裡用到了 self,那 block 會保持一個 self 的引用,但是 self 並沒有直接或間接持有 block,所以不會造成循環引用。

你的理解是對的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板