У меня есть утечка памяти, которая была очень упрямой в течение прошлой недели или около того. У меня есть метод класса, который я использую в классе «ArchiveManager», который разархивирует для меня определенный файл .dat и вернет массив с его содержимым. Вот метод:
+(NSMutableArray *)unarchiveCustomObject
{
NSMutableArray *array = [NSMutableArray arrayWithArray:[NSKeyedUnarchiver unarchiveObjectWithFile:/* Archive Path */]];
return array;
}
Я понимаю, что на данный момент у меня нет права собственности на него, и я возвращаю его.
CustomObject *myObject = [[ArchiveManager unarchiveCustomObject] objectAtIndex:0];
Затем, позже, когда я разархивирую его в используемом контроллере представления (я даже не создаю его массив и не делаю на него указатель, я просто ссылаюсь на него, чтобы получить что-то из возвращенного массива unarchiveCustomIbject (objectAtIndex). Именно здесь Instruments вызывает утечку памяти, но я не понимаю, как это может произойти! Любые идеи?
Заранее спасибо.
Редактировать: Пользовательский объект 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];
}
}