ios - 我什么时候应该在区 block 中使用弱势 self ,为什么砌体中没有保留周期?

标签 ios objective-c objective-c-blocks masonry-ios-osx

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和Masonry。如果使用I BlocksKit,bk_addEventHandler,则存在一个保留周期,我认为这是因为self保留self.view,保留testButton,保留self。但是,当我单独使用Mansonry而不使用BlocksKit时,并且我在Masonry mas_makeConstraints中使用了强自我,我发现没有保留周期,因为viewController可以调用dealloc方法。谁能向我解释说砌体中没有保留周期?

最佳答案

这是因为块套件块被保留以便以后执行(因此,通过对自身的引用,保留周期来创建),而砌体块现在或多或少被执行,然后被丢弃。

同样,调用UIView animate...方法时,您不必担心保留周期。这是因为一旦代码结束,运行循环就会结束,动画块将被执行并丢弃。但是,在NSNotification观察程序块中对self的引用可能会导致保留周期,因为它只是被系统永久保留,直到您取消注册该通知为止,同时又保留了该观察程序。

关于ios - 我什么时候应该在区 block 中使用弱势 self ,为什么砌体中没有保留周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914834/

相关文章:

iphone - XCode 编译器警告 : 'foo' may not respond to -bar

objective-c - block 内的时间分析代码

ios - 等到一个 block 到达它的完成 block

ios - 从delphi调用 objective-c 代码块

ios - 代理从我的 iPhone/iPad 到 Mac 上的 VirtualBox 的 http 和 https 流量

iOS 崩溃与核心数据

ios - 转换到新 SKScene 时粒子效果消失

ios - Firebase Analytics iOS/Unity 推送通知?

javascript - iOS 设备上使用 CraftyJS 的场景大小

ios - RestKit 没有从本地存储中删除孤立的对象