2009-12-19 2 views
2

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

Категория Тип события Отметка Адрес Размер Ответственной библиотеки Ответственного Caller 27 SocialNetwork таНос 00: 19,951 0x3d64d20 80 Foundation - [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; 

}

я не понял, где это моя проблема?

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

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

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

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

ответ

1

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

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

+0

TechZen еще раз благодарен вам за быстрый ответ. Итак, что я должен сделать для решения моей проблемы? – fyasar

+2

TechZen после того, как я увижу ваш ответ, который я исследовал в stackoverflow, Stefan von Chossy уже дал ответ, связанный с моей проблемой, если у кого-то такая же проблема, как и я, посмотрите здесь: http://stackoverflow.com/questions/537044/хранения, таможенно-объекты-в-ан-NSMutableArray-в-NSUserDefaults/751749 # 751749 в пользовательском классе вы должны использовать - (ID) initWithCoder: (NSCoder *) кодировщик { \t само = [супер INIT] ; вместо; - (id) initWithCoder: (кодер NSCoder *); { self = [[CustomObject alloc] init]; Еще раз спасибо – fyasar

+1

@fyasar Пожалуйста, разместите свое решение как ответ, чтобы я мог его приветствовать. Переключение с 'self = [[MyObject alloc] init]' на 'self = [super init]' действительно разрешает утечку, сообщаемую профилированием в Инструментах. – Palimondo

Смежные вопросы