【发布时间】:2015-12-25 06:44:35
【问题描述】:
我不经常使用属性 atomic,但我发现有些奇怪。我的测试文件没有使用 ARC。
我使用属性@property(atomic,retain) NSArray* test;
然后我只是对 init 方法中的东西进行测试。
像这样
1) NSArray* testArray = [NSArray arrayWithObject:@"1"];
2) self.test = testArray;
执行1)后
[testArray retainCount] = 1
执行2)后
[testArray retianCount] = 2
[self.test retainCount] = 3
[_test retainCount] = 3.
然后我将属性 atomic 更改为 nonatomic。执行后 1)
[testArray retainCount] = 1
执行2)后
[testArray retianCount] = 2
[self.test retainCount] = 2
[_test retainCount] = 2.
所以我不知道为什么。 atomic 可以加retainCount吗?
【问题讨论】:
-
简答:
retainCount是一个内部实现细节,不应用于任何事情。 -
奇怪的是
[testArray retainCount]和[self.test retainCount]可能不同。 -
@kelin 不是;对象的绝对保留计数完全没用。区别在于编译器和/或运行时的实现细节。它可能会在优化级别、平台和/或软件版本之间发生变化。
-
@bbum,但是这 2 个变量引用了同一个对象,这就是令人惊讶的原因。
-
@bbum,现在我明白了,谢谢!这实际上是问题的答案。
标签: ios objective-c memory-management