不规则地保留NSNumber的数量

n00*_*mer 0 objective-c nsnumber ios retaincount

我在NSNumber整个应用程序(非ARC)中使用不同的语法.为了更加了解情况,我试着看看如何NSNumber保留s,具体取决于它们的初始化语法.所以我做了以下事情:

NSNumber* a = @1;
NSNumber* b = [[NSNumber alloc] initWithInt:2];
NSNumber* c = [NSNumber numberWithInt:3];

NSLog(@"%d | %d | %d", a.retainCount, b.retainCount, c.retainCount);
Run Code Online (Sandbox Code Playgroud)

这个代码片段是用按钮点击执行的,输出让我感到困惑(重复点击):

73 | 27 | 6
78 | 159 | 22
78 | 160 | 22
78 | 161 | 22
78 | 162 | 22
78 | 163 | 22
85 | 169 | 22
85 | 170 | 22
85 | 171 | 22
85 | 172 | 22
Run Code Online (Sandbox Code Playgroud)

现在这并没有真正的目的(至少在我的情况下不是这样),但我想知道这些NSNumber是如何得到这些保留计数的.

And*_*kha 6

你永远不应该使用retainCount.决不. 看这里

  • @GwendalRoué不,真的,不要使用retainCount.除了最人为的情况外,返回的值在所有情况下都毫无意义.它不是一个有用的调试工具.仪器中的计数通过非常有用,因为仪器还显示每个保留,释放和其中的线程的回溯.没有这些额外的信息,绝对保留计数是没有意义的. (9认同)
  • 是.这是货物崇拜节目.没有理解,也没有明确的权威论证.事实上,内存由保留计数管理.必须了解保留计数才能控制内存管理.保留计数不是禁忌,也不是禁止.人们必须对保留计数感到满意.他们试验是正常的. (3认同)
  • @ Cy-4AH保留计数无法告诉您对象是否被释放; 例如,retainCount方法永远不会返回0.它也不反映物体的自动释放状态. (3认同)