iOS方法与弱与强

  • 本文关键字:iOS 方法 ios objective-c
  • 更新时间 :
  • 英文 :


我一直在使用ARC时阅读有关强弱的信息。现在我想我比属性更好地理解了。

但我刚刚读到我可以在方法中使用__weak和__strong。但我不确定我是否完全明白这一点。我如何使用它是:

- (void)someMethod{
   __weak NSString *text = [self.textField text];
   etc...
}

在上面的例子中,我使用弱,因为它本来是标准的强,我不需要有一个强指针来指它(我认为)。因为文本字段本身会保留它吗?

我的问题是我是否理解这个概念,使用__weak而不是默认__strong是否有优势?

是的,默认情况下,text将是强引用,只要引用处于活动状态,就保持对象(self.textField text)的活动状态。但是,有了__weak参考,物体的寿命是由self.textField决定的。

但是,声明__weak NSString *text没有真正的内存优势(至少在这种特殊情况下)。因此,我建议使用默认行为(不要将文本声明为__weak

NSString *text = [self.textField text];

通常,建议使用__weak以避免循环引用,例如 delegate

@property (nonatomic, weak) id delegate;

你只需要在特殊上下文中使用它。在这样的普通方法中,您可以使用 NSString *text

这个指针会很强,但这不是问题,因为如果没有人使用它,它将在方法结束时被销毁

将其

声明为弱风险,当您尝试访问对象'文本时,它可能会为零。这里的"弱"的意思是:如果没有"强"对象引用"文本",那么一旦"someMethod"完成执行,"文本"将被删除。

最新更新