在我的研究中,我遇到了一些奇怪的事情。
@interface Class {
NSString *_string
}
- (void) Method1 {
_string = @"ASDF";
}
最初我认为这_string
是自动释放池的一部分,并且真的没有考虑它的内存方面。
在阅读了这篇 SO 帖子Objective C NSString* 属性保留计数奇怪之后
,我意识到不,情况并非如此,并且保留计数_string
实际上是UINT_MAX
显然,我认为_string
作为自动释放池一部分的想法是侥幸,而我处理变量的方式只是以某种方式解决了。不过,我想知道的是:什么时候@"ASDF"
被扔掉?我知道我应该使用属性和设置器,但可能有很多代码看起来像这样,因为将常量分配给变量非常直观。
这些不可变的字面量NSString
s 的生命周期是什么?什么时候会因为不再驻留在内存中而[_string length]
实际返回错误?@"ASDF"