我有這個內存泄漏,在過去一週左右一直非常固執。我在一個名爲「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];
}
}
您是在模擬器還是在設備上測試?如果您正在使用模擬器,請嘗試使用該設備;模擬器經常給內存分析帶來錯誤的結果。 – deanWombourne 2010-03-12 17:58:40
我正在使用該設備。 – skylerl 2010-03-12 18:17:22
你可以發佈CustomObject的initWithCoder:方法實現嗎? – 2010-03-12 20:52:57