NSString - stringWithFormat 自动释放

Posted

技术标签:

【中文标题】NSString - stringWithFormat 自动释放【英文标题】:NSString - stringWithFormat released automatically 【发布时间】:2011-08-22 17:22:48 【问题描述】:
@property(nonatomic, retain) NSString *password;

-(id)init 
...
password=[NSString stringWithFormat:@"%@", [[NSProcessInfo processInfo] globallyUniqueString]];
OR
password=[[NSProcessInfo processInfo] globallyUniqueString];

我的问题是,在执行过程中,在某个随机点,密码对象会自动释放。当我使用任何一个任务时,效果都是一样的。一旦我放入保留,问题就不再存在。我确定在流程中的任何地方都没有释放密码对象 - 正如我提到的那样,它在单例类中。我还检查了即使释放了密码对象,类实例也是相同的。

请给点提示!

【问题讨论】:

【参考方案1】:

您分配的是 iVar,而不是属性... 因此,由于您不使用 setter 方法,因此您的对象不会被保留。

改用该属性:

self.password = ...

【讨论】:

【参考方案2】:

你可以使用...

password=[[NSString stringWithFormat:@"%@", [[NSProcessInfo processInfo] globallyUniqueString]] retain];

还可以在memory management 上查看 Apple 的文档。我还会在您的代码中设置断点,然后查看您的对象是否被释放。

【讨论】:

以上是关于NSString - stringWithFormat 自动释放的主要内容,如果未能解决你的问题,请参考以下文章

将NSString转换成UTF8编码的NSString

NSString

NSString基本概念

将 NSString 转换为具有日期格式的 NSString 块

NSString 到 CFStringRef 和 CFStringRef 到 ARC 中的 NSString?

NSString 转换 UTF8