簡體   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