【问题标题】:Why retain count in negative value? [duplicate]为什么要保留负值计数? [复制]
【发布时间】:2013-01-14 02:34:45
【问题描述】:

可能重复:
NSString retain Count

是否有可能任何对象的保留计数为负值?

我有这个代码

NSString *str = [[NSString alloc] initWithString:@"Hello World"];
NSLog(@"String Retain Count: %i", [str retainCount]);

这将返回保留计数 -1。

为什么会这样?

我也是这样做的

NSString *str = [[NSString alloc] init]

保留计数中仍然返回负值。

这是怎么发生的?

请帮助理解这件事!!!!!!

【问题讨论】:

  • RetainCount 几乎没用,详见此处:stackoverflow.com/questions/4636146/when-to-use-retaincount
  • @kuba 这不是那个问题的重复,所以请阅读我的问题。
  • @Rizzu:它是重复的。返回的保留计数是 2147483647 ,而您得到输出 -1 只是因为您使用带符号整数的 %i 格式打印了值。
  • 好的,那么 "NSString *str = [[NSString alloc] init] " 呢?
  • @Rizzu: [[NSString alloc] init] 返回一个常量空字符串。 - 保留计数是 NSUInteger,因此它不能为负数

标签: iphone ios objective-c memory-management retaincount


【解决方案1】:

retainCount doesn't return the reference count of an object. - 它返回无关的废话。

(出于性能原因,不可变常量字符串,复制时返回self。如果比较指针指向@""[[NSString alloc] initWithString:@""],它们将相等。)

【讨论】:

  • 请注意:[[NSString alloc] initWithString:@""] 返回与 @"" 相同的指针,但 [[NSString alloc] init] 返回不同的(唯一)指针。
  • @MartinR 谢谢,已更新。 (Apple 的代码是多么次优!:P)
猜你喜欢
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 2016-02-18
  • 2011-11-10
  • 2019-02-19
  • 2023-01-10
  • 2023-03-23
  • 2012-11-25
相关资源
最近更新 更多