Kod adalah contoh saya tidak tahu sama ada pemahaman saya betul.
[self.view mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.otherView.mas_centerY);
}];
Blok memegang diri, tetapi self.view tidak memegang blok ini, kerana kod sumber Masonry adalah seperti berikut:
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
self.translatesAutoresizingMaskIntoConstraints = NO;
MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
block(constraintMaker);
return [constraintMaker install];
}
Ia hanya blok(constrainMaker). Jika ia ditukar kepada self.block = block(constrainMaker), adakah paparan itu juga memegang blok
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.