Я не думаю, что в первом случае показан объект с автоматическим освобождением, все будет зависеть от того, как вы управляли созданием и уничтожением этого конкретного объекта. Например, если вы создаете этот объект, вы вызываете:
//This string will indeed be autoreleased
theStr=[NSString stringWithString:@"Jibber jabber"];
//Or even
theStr=@"Jibber jabber";
Но вы должны взять на себя ответственность за управление памятью, если создаете ее следующим образом:
//Manage my memory
theStr=[[NSString alloc] init];
//You have to release this property on the dealloc method
-(void)dealloc{
[theStr release];
[super dealloc];
}
Во втором примере вы создаете метод установки и метод получения для свойства theStr
и, добавляя атрибут nonatomic
, вы делаете ваше свойство не безопасным для потока, что означает, что поток может начать изменять ваше свойство, пока другой уже редактирует его. А установив атрибут retain
для вашего свойства, метод установки будет синтезирован следующим образом:
- (void) setTheStr:(NSString *) newString {
[newString retain];
[theStr release];
theStr = newSupervisor;
}
Вы можете узнать больше об этом в одной из моих любимых книг, Learning Objective-C 2.0 в главе 12.