2009-12-19 663 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