objective-c - 弱和强属性示例

标签 objective-c reference-counting

我从 Objective-C 开发开始,试图理解弱引用和强引用。我想我明白了,但我不确定……

让我们考虑一下代码:

@interface SomeClass {} 
@property (nonatomic, weak) NSString* propertyName;
@end

现在,如果我在代码中的某处调用如下内容:

NSString* s = someClassInstance.propertyName;

引用计数器没有递增。我的理解正确吗?

  • 疑点一:propertyName的引用计数器值是多少?

  • 疑点2:所以...你能举个例子说明我什么时候可以拿到这个属性的强引用吗?我希望你知道我的意思或我不明白的地方......

我会得到弱引用。

最佳答案

propertyName 声明为“弱”属性意味着两件事:

  1. 当您将对象分配给 propertyName 时,该对象的引用计数不会增加。

  2. propertyName指向的对象被释放时,propertyName将被设置为nil

    <

propertyName 的值赋给另一个变量可能会也可能不会对引用计数产生任何影响。如果将它分配给 strong 属性,您几乎肯定会增加引用计数(因为这是 strong 属性语义的一部分)。但最终编译器将决定是否有必要修改引用计数。

了解 Objective-C 中对象所有权的概念很重要,无论您是否使用 ARC,但在任何给定时刻对给定对象的实际引用计数的详细信息并不是那么有用。请记住:strong 属性拥有一个对象。 weak 属性不会。

关于objective-c - 弱和强属性示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253423/

相关文章:

objective-c - 每次对话框中发生任何更改时,界面生成器 NSStaticText 值都需要更新

ios - 在类型 'remoteMessageDelegate' 的对象上找不到属性 'FIRMessaging *'

iOS 有条件地显示 View

ios - UITableViewCell - 如何在重用前重置内容

multithreading - 在 Rayon 线程内调用 `Arc::new()` 会导致垃圾编译器错误

objective-c - 何时保留 NSString?

objective-c - 从 NSFetchedResultsController 检测 sectionNameKeyPath 的更新

c++ - STLPort的字符串实现是使用引用计数吗?

objective-c - 将文字字符串分配给具有 "="的 NSString 实际上有什么作用?

c++ - cv::Mat 的 deallocate 方法有什么作用?