У меня есть класс с именем 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
?
Вы знаете, что вы клонируете iOS 'copy' метод, не так ли? – Abizern
@ Абизерн: Я что? Я знаю, что есть смысл копировать метод в объекте-с, но если мне нужна специальная реализация копии, могу ли я сделать это? – Dani
Посмотрите на [NSCopying] (http://developer.apple.com/library/ios/# documentation/Протокол Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html) – Abizern