UIButton *testButton = [[UIButton alloc] init];
[self.view addSubview:testButton];
testButton.backgroundColor = [UIColor redColor];
[testButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.equalTo(@100);
make.height.equalTo(@100);
make.left.equalTo(self.view.mas_left);
make.top.equalTo(self.view.mas_top);
}];
[testButton bk_addEventHandler:^(id sender) {
[self dismissViewControllerAnimated:YES completion:nil];
} forControlEvents:UIControlEventTouchUpInside];
如果我用blocksKit的bk_addEventHandler
方法, 其中使用strong self, 该viewController就无法dealloc, 我理解是因为,self retain self.view, retain testButton, retain self.
但是如果只用Mansonry的mas_makeConstraints
方法, 同样使用strong self, 该viewController却能正常dealloc, 请问这是为什么, 为什么Masonry没有导致循环引用
Sama ada ia akan menyebabkan rujukan bulat, anda hanya perlu menyemak sama ada blok itu disalin di dalam fungsi
Seperti Mansonry
(NSArray )mas_makeConstraints:(void(^)(MASConstraintMaker ))block {
self.translatesAutoresizingMaskIntoConstraints = NO;
MASConstraintMaker *ConstraintMaker [[MASConstraintMaker alloc] initWithView:self];
block(constraintMaker);
kembalikan [constraintMaker install];
}
Jika tiada salinan dan ia dikeluarkan selepas digunakan, ia tidak akan menyebabkan rujukan pekeliling.
Bukankah ia menjadi amaran apabila terdapat kemungkinan rujukan pekeliling?
Ubah seperti ini
Rujukan pekeliling boleh dielakkan. Jangan tanya saya mengapa, saya tidak begitu faham, cuma semua orang menulisnya seperti ini.