iOS方法弱与强

时间:2013-10-22 13:53:29

标签: ios objective-c

使用ARC时,我一直在阅读有关强弱的内容。现在我认为与物业相比,我理解得更好。

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

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

在上面的例子中,我使用weak,因为否则它将标准强,我不需要有一个强大的指针(我认为)。因为文本域本身会保留它吗?

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

3 个答案:

答案 0 :(得分:3)

是的,默认情况下text将是强引用,只要引用处于活动状态,就保持对象(self.textField text)处于活动状态。但是,使用__weak引用时,对象的生命值由self.textField确定。

然而,声明__weak NSString *text(至少在这种特殊情况下)没有真正的记忆优势。所以,我建议采用默认行为( NOT 将文本声明为__weak

NSString *text = [self.textField text];

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

@property (nonatomic, weak) id delegate;

答案 1 :(得分:1)

您只需要在特殊情况下使用它。在像你这样的常规方法中你可以使用 NSString *text

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

答案 2 :(得分:0)

当你试图访问它时,声明对象'文本可能是nil的风险很小。 “弱”的含义是:如果没有“强”对象引用“文本”,那么“someMethod”完成执行后,“text”将被删除。