Мне просто нужно подтверждение того, вызывает ли утечка памяти следующее:
.h файл
@property (nonatomic, retain) MyObject *foo;
.m файл
@synthesize foo;
...
self.foo = [[MyObject alloc] init];
dealloc
настроен как
[foo release];
Насколько я понимаю, реализация автоматически сгенерированного метода доступа выглядит так:
-(void)setFoo:(MyObject *)newObject {
if (foo != newObject) {
[foo release];
foo = [newObject retain];
}
}
Прогулка по self.foo = [[MyObject alloc] init];
теперь читается как "распределенная"новый объект MyObject, чей счет будет равен 1, передайте его setFoo:
, foo никогда не будет равен myObject, так как он был недавно выделен, поэтому освободите старое значение, увеличьте счет сохранения newObject, сделав его 2 и назначить его для foo "
dealloc освобождает foo, поэтому устанавливает для его счетчика хранения значение 1 , что означает, что этот объект просочился?
Чтобы сделать это безопасно, мы должнынапишите наш код как
self.foo = [[[MyObject alloc] init] autorelease];
Правильно ли мое понимание?
РЕДАКТИРОВАТЬ
Я понимаю, что этот вопрос не совсем подходит для SO, поэтому чувствуюможете указать мне лучшее место, чтобы задать этот тип вопросова также.