我在使用 ARC 时一直在阅读有关强和弱的内容。现在我想我对属性的理解更好了一些。
但是我刚刚读到可以在方法中使用 __weak 和 __strong。但我不确定我是否完全理解了这一点。我的使用方法是:
- (void)someMethod{
__weak NSString *text = [self.textField text];
etc...
}
在上面的例子中,我使用weak,因为否则它将是标准的strong,我不需要有一个指向它的强指针(我认为)。因为文本字段本身会保留它?
我的问题是我理解这个概念吗?使用 __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;
关于iOS 方法之弱与强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19519899/