Я написал очень базовый класс, чтобы поиграть с новыми методами ARC и accessor, просто чтобы понять, как они работают.Из того, что я прочитал, ARC должен заменить ручной подсчет ссылок, верно?Но у меня возникает проблема с методами доступа.
Вот мой интерфейс / реализация для моего Container
класса:
// interface
@interface Container : NSObject {
NSMutableString *string;
}
- (NSMutableString *)string;
- (void)setString:(NSMutableString *)aString;
@end
// implementation
@implementation Container
- (NSMutableString *)string
{
return string;
}
- (void)setString:(NSMutableString *)aString
{
string = aString;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"inner string = %@", string];
}
@end
Мне кажется, все детали подсчета ссылок обрабатываются нормальнопо ARC я верю.Проблема возникает в основном методе:
Container *myContainer = [[Container alloc] init];
NSMutableString *aString = [NSMutableString stringWithString:@"Hello!"];
[myContainer setString:aString];
NSLog(@"%@", myContainer);
[aString setString:@"Bye!"];
NSLog(@"%@", myContainer);
aString = [myContainer string];
[aString setString:@"Bye, again!"];
NSLog(@"%@", myContainer);
Кажется, что aString
указывает на переменную-член string
, что означает, что когда я изменяю aString
, я также изменяю string
вместе с ней.Я попытался выпустить aString
из метода main()
, но затем я получил ошибку компилятора.Как это исправить?Я использую метод copy
, или есть другой способ?