2

在使用 ARC 时,我一直在阅读有关强和弱的信息。现在我想我对属性的理解要好一些。

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

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

在上面的示例中,我使用了弱,因为否则它将是标准的强,并且我不需要指向它的强指针(我认为)。因为文本字段本身会保留它?

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

4

3 回答 3

3

是的,默认情况下text将是强引用,self.textField text只要引用存在,对象 ( ) 就会保持活跃。但是,使用 __weak 引用,对象的生命是由self.textField.

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

NSString *text = [self.textField text];

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

@property (nonatomic, weak) id delegate;
于 2013-10-22T13:58:39.397 回答
1

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

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

于 2013-10-22T13:58:59.413 回答
0

当您尝试访问它时,将其声明为对象 'text 可能为零的弱风险。这里的“弱”意味着:如果没有引用“文本”的“强”对象,那么一旦“某些方法”完成执行,“文本”将被删除。

于 2013-10-22T13:57:07.727 回答