Инструмент «Утечки» говорит мне, что у меня есть утечка памяти, когда я использую decodeObjectForKey
в пределах initWithCoder
. Например:iOS initWithCoder/decodeObjectForKey утечка памяти
Class.h
{
MyObject *myObject;
}
@property (nonatomic, retain) MyObject *myObject;
Class.m
@synthesize myObject
-(void)dealloc{
[myObject release];
[super release];
}
-(id)initWithCoder:(NSCoder *)decoder{
if (self = [super init]{
self.myObject = [decoder decodeObjectForKey:@"MyObject"];
}
return self;
}
По желанию в комментариях:
-(void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:myObject forKey:@"MyObject"];
}
Утечки сообщает об утечке типа NSCFString на линии;
self.myObject = [decoder decodeObjectForKey:@"MyObject];
Как я понимаю, decodeObjectForKey возвращает объект с автореализацией. Поскольку я сразу присваиваю это значение свойству myObject, которое указано как (нетоксичное, сохраняемое) в определении свойства, я сохраняю автореализованный объект через метод setter свойства myObject. Затем myObject освобождается в методе dealloc. Я не понимаю, где утечка, если я правильно понимаю последовательность. Также почему это сообщается как NSCFString, когда тип MYObject?
Любые мысли будут оценены, в том числе, если мои предположения выше правильны.
в следующий раз, пожалуйста, отформатируйте свой код :) – vodkhang
Затем я хочу увидеть ваш encodeObject: forKey: метод реализовать – vodkhang
Новое на сайте, извините за формат. Добавлено encodeObject: метод для запроса – DrCronus