NSKeyedUnarchiver内存泄漏问题

时间:2009-12-19 16:02:23

标签: iphone cocoa-touch iphone-sdk-3.0

我对此代码有疑问,它正在调试环境。在仪器上我看到这个功能的内存泄漏问题,仪器正在发出警告

类别事件类型时间戳地址大小负责图书馆负责人 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 个答案:

答案 0 :(得分:1)

我认为问题很可能出现在自定义类的initWithCoder:方法中。它正在泄漏,但分析仪报告它在归档器中。

与您的问题无关,我会提醒您不要使用[[NSMutableArray alloc] init]来初始化集合,尤其是可变集合。而是使用[[NSMutableArray alloc] initWithCapacity:1]。我发现只使用init使用initWithCapacity清除的奇怪问题。