【发布时间】:2011-01-26 22:29:09
【问题描述】:
在过去一周左右的时间里,我的内存泄漏一直很顽固。我有一个在名为“ArchiveManager”的类中使用的类方法,它将为我解压缩特定的 .dat 文件,并返回一个包含其内容的数组。方法如下:
+(NSMutableArray *)unarchiveCustomObject
{
NSMutableArray *array = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithFile:/* Archive Path */]];
return array;
}
我知道我目前没有它的所有权,我将它归还。
CustomObject *myObject = [[ArchiveManager unarchiveCustomObject] objectAtIndex:0];
然后,稍后当我在要使用的视图控制器中解压缩它时(我什至没有创建它的数组,也没有创建指向它的指针,我只是引用它以从返回的数组中获取一些东西通过 unarchiveCustomIbject (objectAtIndex)。这是 Instruments 调用内存泄漏的地方,但我看不出这是如何泄漏的!有什么想法吗?
提前致谢。
编辑:添加了 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];
}
}
【问题讨论】:
-
你是在模拟器上测试还是在设备上测试?如果您使用的是模拟器,请在设备上尝试;模拟器经常给出错误的内存分析结果。
-
能否贴出CustomObject的initWithCoder:方法实现?
标签: iphone objective-c memory-management return-value memory-leaks