Установщик удерживаемого объекта автоматически освобождает объект первым?
Я все еще работаю без ARC, поэтому у меня есть эти вопросы.
Предположим, у меня есть ивар, определенный таким образом:
ObjectClass *anObject_;
с большим количеством
@property (nonatomic, retain) ObjectClass *anObject;
И синтез с использованием
@synthesize anObject = anObject_;
Если у меня есть сеттер, который автоматически синтезируется с использованием атрибута retain, то установщик сначала выполнит деблокирование, если это необходимо ? Примерно так:
- (void) setAnObject:(ObjectClass*)anObject {
if (anObject_) [anObject_ release];
anObject_ = [anObject retain];
}
А можно просто назначать объекту, не отпуская его сначала ?
Можно ли освободить объект, присвоив свойству значение nil ? (Это может быть небезопасно, если есть другие владельцы.)
self.anObject = nil;
Другими словами, могу ли я обойтись без кода if (anObject_) [anObject_ release];
вне установщика и позволить синтезированному установщику сделать это для меня ?
Если я напишу свой собственный установщик, нужно ли мне добавить / включить сохранение ? Если в состав синтезатора входит выпуск (это мой первоначальный вопрос), нужно ли мне добавлять / включать это, в моем собственном сеттере ?
И последнее: при использовании ARC я предполагаю, что self.anObject = nil;
и self.anObject = anthingelse;
оба безопасны ? И исходный объект будет освобожден независимо от того, какой у меня код установщика ?