NSKeyedUnarchiver проблема утечки памяти - PullRequest
2 голосов
/ 19 декабря 2009

У меня проблема с этим кодом, он работает в среде отладки.На приборах, которые видят проблему утечки памяти в этой функции, приборы выдают предупреждение, что

Категория Тип события Отметка времени Размер адреса Ответственная библиотека Ответственный вызывающий абонент 27 SocialNetwork Malloc 00: 19.951 0x3d64d20 80 Основание - [NSKeyedUnarchiver _decodeArrayOfObjectsForKey:]

- (NSMutableArray *)GetDataInstanceToUserDefaults{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];   
NSData *storedObject = [userDefaults objectForKey:@"MyDataKey"];
NSMutableArray *data;   

if(storedObject != nil)
{       
    NSArray *savedArray = [NSKeyedUnarchiver unarchiveObjectWithData:storedObject];
    if(savedArray != nil)
        data = [[NSMutableArray alloc] initWithArray:savedArray];
    else
        data = [[NSMutableArray alloc] init];
}else{
    data = [[NSMutableArray alloc] init];   
}   
return data; 

}

Я не понял, в чем моя проблема?

Спасибо за вашу поддержку

Редактировать: Кстати, яДолжна дать более подробную информацию об этой проблеме, эта функция (как вы можете видеть) хранит мой объект.Мой объект является пользовательским классом и хранится в NSMutableArray.

Я уже добавил эти методы в свой пользовательский класс

-(void)encodeWithCoder:(NSCoder *)coder{
-(id)copyWithZone:(NSZone*)zone {
-(id)initWithCoder:(NSCoder *)coder{

1 Ответ

1 голос
/ 19 декабря 2009

Я думаю, что проблема скорее всего в initWithCoder: методе вашего пользовательского класса. Он подтекает, но анализатор сообщает, что он находится в архиваторе.

Вне зависимости от вашей проблемы, я бы предостерег вас от использования [[NSMutableArray alloc] init] для инициализации коллекций, особенно изменяемых коллекций. Вместо этого используйте [[NSMutableArray alloc] initWithCapacity:1]. Я видел странные проблемы с использованием только init, которые были устранены с помощью initWithCapacity.

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