繁体   English   中英

显示NSPlaceholderstring泄漏的工具

[英]instruments showing NSPlaceholderstring leaks

我正在尝试减少我的应用程序中的内存泄漏,所以我使用仪器来查找所有泄漏。 我设法删除了几乎所有的泄漏,除了一个非常烦人的泄漏。

仪器告诉我,我有很多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;

我尝试了我能想到的一切:

  • 我使用retain而不是copy
  • 我使用了NSString的自动释放分配(stringWithFormat)
  • 我尝试用自动释放池包装代码

以上都没有改变泄漏。 (在某些情况下,泄漏的类型会发生变化,但仍然存在泄漏)

想法有人吗?

你在哪里发布storedHash 你是用dealloc发布的吗?

请注意, NSPlaceholdeString是一个实现细节; 它是NSString+alloc方法返回的实例的类。

dealloc方法怎么样? 你是否在dealloc方法中释放了storedHash? 如何检查if (nil == self.storedHash)

你应该用

@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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM