iOS 方法之弱与强

标签 ios objective-c

我在使用 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/

相关文章:

ios - 带有 NSTimers 和服务器调用的后台模式

ios - 架构 arm64 的 undefined symbol : "_OBJC_CLASS_$_GANTracker

objective-c - Xcode 错误 : Expected identifier

objective-c - 加速循环以创建长字符串

iphone - 自定义广告横幅

iphone - UITableViewController 内容未出现

ios - 临时部署在加载时崩溃

objective-c - 更改 UIBarButtonItem 的位置

ios - Swift/如何检查可达性

ios - bezierPathWithRoundedRect : gives bad result on retina screen