我有这种记忆泄漏在过去一周左右非常顽固。我有一个类方法,我在一个名为“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];
}
}
答案 0 :(得分:1)
您是如何申报物业的?分配,保留,复制?如果有必要,你确定在dealloc方法中释放所有这些吗?
答案 1 :(得分:0)
仪器究竟告诉你什么是漏水?它可能是你的CustomObject吗?
(小的一点 - 您的方法返回NSMutableArray而不是NSArray的原因是什么?)