Утечка памяти при возврате объекта - PullRequest
0 голосов
/ 12 марта 2010

У меня есть утечка памяти, которая была очень упрямой в течение прошлой недели или около того. У меня есть метод класса, который я использую в классе «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];
     }
}

Ответы [ 2 ]

1 голос
/ 13 марта 2010

Как вы объявили свои свойства? Назначать, сохранять, копировать? Вы уверены, что в случае необходимости вы освобождаете их все при помощи метода dealloc?

0 голосов
/ 12 марта 2010

Что именно инструменты говорят вам, течет? Возможно ли, что это ваш CustomObject?

(Небольшое отступление - есть ли причина, по которой ваш метод возвращает NSMutableArray, а не NSArray?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...