我正在尝试减少应用中的内存泄漏,因此我使用仪器查找所有泄漏。我设法删除了几乎所有的泄漏,除了一个非常讨厌的泄漏。
乐器告诉我,我有很多NSPlaceholderstring泄漏。 产生泄漏的代码(根据工具)是:
if (nil == storedHash)
{
NSString *description = [[NSString alloc] initWithFormat:@"1 = %@ 2= %d", uId, service];
self.storedHash = description; // This line is the leak according to instruments
[description release];
description = nil;
}
return storedHash
storedHash定义如下:
@property(copy) NSString* storedHash;
我尝试了我能想到的一切:
以上都没有改变泄漏。 (在某些情况下,泄漏的类型会发生变化,但仍然存在泄漏)
想点什么?
答案 0 :(得分:5)
你在哪里发布storedHash
?你是否在dealloc
发布了它?
请注意NSPlaceholdeString
是一个实现细节;它是NSString
的{{1}}方法返回的实例的类。
答案 1 :(得分:0)
dealloc
方法怎么样?你是否在dealloc方法中释放了storedHash?如何检查if (nil == self.storedHash)
答案 2 :(得分:0)
你应该使用
@property(nonatomic, retain) NSString* storedHash;
而是复制。 @property(copy)
没有发布你的旧NSObject,你应该自己做:
if (nil == storedHash)
{
NSString *description = [[NSString alloc] initWithFormat:@"1 = %@ 2= %d", uId, service];
[self.storedHash release];
self.storedHash = description; // This line is the leak according to instruments
[description release];
// description = nil; // it's unnecessary
}
你也应该在dealloc中发布storedHash。