У меня есть класс с именем SomeClass
.в его init
у меня есть много строк, таких как:
SomeProperty_ = [[SomeObject alloc] initWithSomething];
В то время как свойства объявлены как
@property(retain) SomeObject *SomeProperty;
и определены как
@synthesize SomeProperty = SomeProperty_;
КогдаЯ выделяю объекты SomeClass
и позже освобождаю их, все работает нормально и утечек памяти нет.Однако, когда я копирую объект SomeClass
, а затем выпускаю его, все строки, такие как
SomeProperty_ = [[SomeObject alloc] initWithSomething];
, отмечаются как утечка памяти в Инструментах.это также правильно, так как я получаю предупреждение о памяти, а затем происходит сбой, если я часто его использую.
Однако, если я создаю метод с именем dealloc
, например:
-(void) dealloc
{
self.SomeProperty = nil;
[super dealloc];
}
С копиями тоже все в порядкеи нет предупреждений памяти или утечек.
Я думаю, это из-за моей copy
реализации:
-(id)copy
{
SomeClass *copy = [[SomeClass alloc] init];
copy.SomeProperty.somePOD = self.SomeProperty.somePOD;
return copy;
}
В чем проблема?что я могу сделать, чтобы решить это без пользовательских dealloc
?