Объективная реализация readonly свойств и private setter в ARC

До ARC, если я хотел, чтобы свойство было readonly для использования, но имело возможность записи внутри класса, я мог сделать:

// Public declaration
@interface SomeClass : NSObject
    @property (nonatomic, retain, readonly) NSString *myProperty;
@end

// private interface declaration
@interface SomeClass()
- (void)setMyProperty:(NSString *)newValue;
@end

@implementation SomeClass

- (void)setMyProperty:(NSString *)newValue
{ 
   if (myProperty != newValue) {
      [myProperty release];
      myProperty = [newValue retain];
   }
}
- (void)doSomethingPrivate
{
    [self setMyProperty:@"some value that only this class can set"];
}
@end

С ARC, если я хочу переопределить setMyProperty, вы больше не можете использовать ключевые слова retain/release, так что это адекватно и правильно?

// interface declaration:
@property (nonatomic, strong, readonly) NSString *myProperty;

// Setter override
- (void)setMyProperty:(NSString *)newValue
{ 
   if (myProperty != newValue) {
      myProperty = newValue;
   }
}
26
задан Brad Larson 21 December 2011 в 08:03
поделиться