【发布时间】:2012-06-30 06:22:02
【问题描述】:
在我的研究中,我遇到了一些奇怪的事情。
@interface Class {
NSString *_string
}
- (void) Method1 {
_string = @"ASDF";
}
最初我认为_string 是自动释放池的一部分,并且真的没有考虑它的内存方面。
阅读此 SO 帖子后Objective C NSString* property retain count oddity
我意识到不,不是这样,_string 的保留计数实际上是 UINT_MAX
显然,我认为_string 是自动释放池的一部分是侥幸,而我处理变量的方式只是以某种方式解决了。不过,我想知道的是:@"ASDF" 什么时候被扔掉?我知道我应该使用属性和设置器,但可能有很多代码看起来像这样,因为将常量分配给变量非常直观。
这些不可变的字面值NSStrings 的生命周期是什么?[_string length] 何时真正返回错误,因为@"ASDF" 不再驻留在内存中?
【问题讨论】:
-
您似乎也对自动释放池的工作方式感到困惑。如果该字符串是自动释放的,那么(假设 ARC 不在播放中)您将无法在那里正确管理您的内存。
标签: objective-c cocoa memory-management nsstring literals