[英]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;
我嘗試了我能想到的一切:
以上都沒有改變泄漏。 (在某些情況下,泄漏的類型會發生變化,但仍然存在泄漏)
想法有人嗎?
你在哪里發布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.