使用ARC时,我一直在阅读有关强弱的内容。现在我认为与物业相比,我理解得更好。
但我刚刚读到我可以在方法中使用__weak和__strong。但我不确定我是否完全得到了这个。我如何使用它是:
- (void)someMethod{
__weak NSString *text = [self.textField text];
etc...
}
在上面的例子中,我使用weak,因为否则它将标准强,我不需要有一个强大的指针(我认为)。因为文本域本身会保留它吗?
我的问题是我是否理解这个概念,使用__weak而不是默认__strong甚至有优势?
答案 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”将被删除。