2009-12-19 259 views
2

我有問題,這個代碼,它的工作在調試環境。如需有關樂器,我對這個功能看到內存泄漏問題,文書中給出警告NSKeyedUnarchiver內存泄漏問題

類別事件類型TIMESTAMP地址大小負責任的圖書館負責來電 27 SocialNetwork malloc的00:19.951 0x3d64d20 80基金會 - [NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]

- (NSMutableArray *)GetDataInstanceToUserDefaults{ 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *storedObject = [userDefaults objectForKey:@"MyDataKey"]; 
NSMutableArray *data; 

if(storedObject != nil) 
{  
    NSArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:storedObject]; 
    if(savedArray != nil) 
     data = [[NSMutableArray alloc] initWithArray:savedArray]; 
    else 
     data = [[NSMutableArray alloc] init]; 
}else{ 
    data = [[NSMutableArray alloc] init]; 
} 
return data; 

}

我不明白的地方是我的問題嗎?

感謝您的支持

編輯:順便說一下,我應該給予更多的細節這個問題,這個功能(你可以看到)被存儲我的對象。我的對象是自定義類並存儲在NSMutableArray中。

我已經添加了這些方法在我的自定義類

-(void)encodeWithCoder:(NSCoder *)coder{ 
-(id)copyWithZone:(NSZone*)zone { 
-(id)initWithCoder:(NSCoder *)coder{ 

回答

1

裏面我認爲這個問題是最有可能在您的自定義類的initWithCoder:方法。它正在泄漏,但分析器報告它在歸檔器中。

無關你的問題,我會提醒你不要使用[[NSMutableArray alloc] init]來初始化集合,特別是可變集合。相反使用,[[NSMutableArray alloc] initWithCapacity:1]。我已經看到使用init的奇怪問題,這些問題已通過使用initWithCapacity清除。

+0

TechZen再次感謝您的快速反應。那麼,我該如何解決我的問題呢? – fyasar 2009-12-19 16:55:55

+2

TechZen看到你的答案我研究過計算器後,斯特凡·馮·Chossy已經給了,與我的問題有關的答案,如果有人有同樣的問題和我一樣,在這裏看看: http://stackoverflow.com/questions/537044 /存儲定製對象功能於一個-的NSMutableArray合NSUserDefaults的/ 751749#751749 在自定義類應該使用 - (ID)的initWithCoder:(NSCoder *)譯碼器{ \t自我= [超級INIT] ; 而不是; - (ID)的initWithCoder:(NSCoder *)編碼器; { self = [[CustomObject alloc] init]; 再次感謝您 – fyasar 2009-12-19 17:20:47

+1

@fyasar請發表您的解決方案作爲一個答案,這樣我就可以了,沃特它。從'self = [[MyObject alloc] init]'切換到'self = [super init]'確實可以解決儀器分析報告泄漏問題。 – Palimondo 2011-11-04 10:12:27