[英]ARC ownership with strong and weak references
以苹果为例
MyViewController *myController = [[MyViewController alloc] init…];
MyViewController * __weak weakMyController = myController;
myController.completionHandler = ^(NSInteger result) {
MyViewController *strongMyController = weakMyController;
if (strongMyController) {
[strongMyController dismissViewControllerAnimated:YES completion:nil];
}
else {
// Probably nothing...
}
};
这是怎么回事 我很困惑:MyViewController * strongMyController = weakMyController;
这是否意味着weakMyController对它有强引用,所以就像weakMyController的保留计数+1一样? 创建对弱iVar的强引用时会发生什么?
这是否意味着weakMyController对它有强引用,所以就像weakMyController的保留计数+1一样?
对于具有其引用的所有变量,myController的保留计数相同。 它是对象的值,而不是指向该对象的变量。 它告诉运行时有许多指向该对象的强引用。
所以,线
MyViewController *strongMyController = weakMyController;
将使该计数增加1,并确保只要我们在范围内拥有该变量,就不会释放视图控制器。
在大多数情况下,在块内的弱引用上调用方法就足够了(在您的示例中为weakMyController
)。 我认为在这种情况下,它们会使用强引用,因为其中涉及到动画(因此,在动画过程中,视图控制器必须存在,如果使用弱引用,则无法保证)。
为了回答问题的另一部分,对一个对象的所有强引用和弱引用都具有相同的值(该对象的内存地址)。 强者和弱者之间的区别是当他们获得价值时会发生什么。 对于弱引用,保留计数保持不变,而强引用则增加计数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.