使用ARC的弱方法与强方法的iOS方法

问题描述:

使用ARC方法时,我一直在阅读有关强和弱的方法。现在我认为我的理解比房地产好一点。使用ARC的弱方法与强方法的iOS方法

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

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

在上面的例子中我用微弱的,因为它否则将为标准的强大,我不需要有很强的指向它(我认为)。因为textfield本身会保留它?

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

是的,默认情况下,text将是强引用,只要引用处于活动状态,就保持对象(self.textField text)处于活动状态。但是,以__弱参考,生命的对象是由self.textField决定的。

但是,宣称__weak NSString *text(至少在这种特殊情况下)没有真正的记忆优势。所以,我建议去与默认行为(声明文本__weak

NSString *text = [self.textField text]; 

一般来说,__weak的建议,以避免例如循环引用delegate

@property (nonatomic, weak) id delegate; 
+0

明白了谢谢 – Haagenti

声明它为弱风险,当您尝试访问对象的文本时可能为零。这里“弱”意味着:如果没有“强”对象指向“文本”,那么'someMethod'执行完成后,'text'将被删除。

您只需要在特殊情况下使用它。在这样的一个正常的方法,你可以只使用 NSString *text

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