Разница сводится к тому, как вы определяете свойство. Например, скажем, у вас есть следующее:
@interface MyObject : NSObject {
NSObject *memberVariable;
}
@property (nonatomic, retain) NSObject *memberVariable;
@end
@implementation MyObject
@synthesize memberVariable;
@end
Указание (nonatomic, retain)
фактически говорит @synthesize
, как создавать методы получения и установки. Указание retain
заставляет метод setter вызывать retain
для объектов, которые я ему передаю. Итак, self.memberVariable = someOtherObject
эквивалентно memberVariable = [someOtherObject retain];
По этой же причине вам никогда не следует делать self.memberVariable = [[NSObject alloc] init];
, если вы указали сохранение в определении свойства. alloc
инициализирует счет удержания равным 1, передача объекта методу-установщику увеличивает счет удержания до 2.