Я получаю утечку в методе initWithCoder.Objective-c - управление initWithCoder и памятью?
Имеет ли unarchiveObjectWithData: cacheData возвращает мне автореализованный объект? чья ответственность за освобождение объекта возвращается из unarchiveObjectWithData: cacheData?
@implementation MyObject
@synthesize something = _something;
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super init])
{
self.something = [aDecoder decodeObjectForKey:@"something"];
}
}
- (void)dealloc
{
self.something = nil;
[super dealloc];
}
@end
Это где я прочитал объект из файла
MyObject *myObject = [NSKeyedUnarchiver unarchiveObjectWithData:cacheData];
Это обсуждалось ранее, но использование методов доступа во время 'init' и' dealloc' не рекомендуется, поскольку оно может иметь непреднамеренные побочные эффекты. В таких тривиальных случаях, как выше, это не проблема, но при сложной инициализации, наблюдении через KVO или в сложных иерархиях объектов это может вызвать множество непредвиденных побочных эффектов. – dreamlax