返回对象时内存泄漏

时间:2010-03-12 17:36:49

标签: iphone objective-c memory-management return-value memory-leaks

我有这种记忆泄漏在过去一周左右非常顽固。我有一个类方法,我在一个名为“ArchiveManager”的类中使用,它将为我取消归档特定的.dat文件,并返回一个包含其内容的数组。这是方法:

+(NSMutableArray *)unarchiveCustomObject
{
     NSMutableArray *array = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithFile:/* Archive Path */]];
     return array;
}

我知道此时我没有它的所有权,我将其归还。

 CustomObject *myObject = [[ArchiveManager unarchiveCustomObject] objectAtIndex:0];

然后,稍后当我在视图控制器中取消归档它时(我甚至不创建它的数组,也不创建指向它的指针,我只是引用它来从返回的数组中取出一些东西)通过unarchiveCustomIbject(objectAtIndex)。这是仪器调用内存泄漏的地方,但我不知道它是如何泄漏的!有什么想法吗?

提前致谢。

编辑:添加了CustomObject initWithCoder:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    if (self = [super init])
    {
        self.string1 = [aDecoder decodeObjectForKey:kString1];
        self.string2 = [aDecoder decodeObjectForKey:kString2];
        self.string3 = [aDecoder decodeObjectForKey:kString3];
        UIImage *picture = [[UIImage alloc] initWithData:[aDecoder decodeObjectForKey:kPicture]];
        self.picture = picture;
        self.array = [aDecoder decodeObjectForKey:kArray];
        [picture release];
    }
    return self;
}

编辑2:我做了一个CustomObject的跟踪,我意识到在我的应用程序中,另一个对象(OtherObject)有它的initWithCoder方法分配一个CustomObject参数,使它保留CustomObject。它看起来像这样:

-(id)initWithCoder:(NSCoder *)aDecoder
{
     if (self = [super init])
     {
          self.customObject = [aDecoder decodeObjectForKey:kCustomObjectKey];
     }
}

2 个答案:

答案 0 :(得分:1)

您是如何申报物业的?分配,保留,复制?如果有必要,你确定在dealloc方法中释放所有这些吗?

答案 1 :(得分:0)

仪器究竟告诉你什么是漏水?它可能是你的CustomObject吗?

(小的一点 - 您的方法返回NSMutableArray而不是NSArray的原因是什么?)