cari

Rumah  >  Soal Jawab  >  teks badan

objective-c - 关于Masonry为什么不会造成循环引用的问题

代码举个例子,我不知道自己的理解对不对。

[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呢

高洛峰高洛峰2757 hari yang lalu653

membalas semua(1)saya akan balas

  • 我想大声告诉你

    我想大声告诉你2017-05-02 09:32:40

    Adalah tidak benar bahawa blok pasti akan menyebabkan rujukan bulatan sama ada ia adalah rujukan bulat bergantung kepada sama ada mereka memegang rujukan yang kukuh antara satu sama lain. Jika diri digunakan dalam blok, blok akan menyimpan rujukan kepada diri sendiri, tetapi diri tidak memegang blok secara langsung atau tidak langsung, jadi ia tidak akan menyebabkan rujukan bulat.

    Pemahaman anda betul.

    balas
    0
  • Batalbalas