objective-c - 为什么发送 retainCount 到 @"Hi"返回 -1?

标签 objective-c types retaincount

retainCount 方法应该返回一个无符号整数。

那为什么 [@"Hi"retainCount] 返回 -1?

最佳答案

简单的回答是,因为@"Hi"是一个字符串文字,它会一直坐在二进制可执行镜像中,永远不会“消失”,因此保留/释放有没有效果,您会看到 UINT_MAX(打印出来时看起来像 -1,例如用 %d 签名)。 (请参阅 Pete Kirkham 关于具有这些语义的 NSObject 的回答)。

除此之外,知道虽然@"Hi"的行为类似于 NSString*,但它实际上是类 CFConstantString 的编译器创建实例(或者可能NSConstantString,我的调试器不同意某些文档),它包装了文字字符串数据并为您提供了 NSString* 接口(interface)。但是编译器知道这些字符串是特殊的并且永远不会被清理,因此它们将始终具有 UINT_MAX (-1) 的 retainCount

关于objective-c - 为什么发送 retainCount 到 @"Hi"返回 -1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2014667/

相关文章:

ios - sendbird sdk自动重连

ios - 为 UIControlStateHighlighted 自定义 UISearchBarIconClear 不起作用

ios - MapBox——在iOS项目中使用比例尺控件

javascript - 为什么javascript中的函数不接受 undefined variable ?

iphone - 在 viewDidAppear 方法中访问用户的位置一次

types - 在 Rust 的枚举中使用现有类型

function - 为什么 Haskell 无点函数版本会导致模棱两可的类型错误?

objective-c - block 捕获对象的过度释放问题;保留计数从 +2 直接跳到 0!

objective-c - 调用 -retainCount 被认为是有害的