I want to override an NSString property declared in a superclass. When I try to do it using the default ivar, which uses the the same name as the property but with an unders
to access the superclass variables, they must be marked as @protected, access to such variables will be only inside the class and its heirs
@interface ObjectA : NSObject
{
@protected NSObject *_myProperty;
}
@property (nonatomic, strong, readonly) NSObject *myProperty;
@end
@interface ObjectB : ObjectA
@end
@implementation ObjectA
@synthesize myProperty = _myProperty;
@end
@implementation ObjectB
- (id)init
{
self = [super init];
if (self){
_myProperty = [NSObject new];
}
return self;
}
@end
Only the superclass has access to the ivar _species
. Your subclass should look like this:
- (NSString *)species {
NSString *value = [super species];
if (!value) {
self.species = @"Homo sapiens";
}
return [super species];
}
That sets the value to a default if it isn't currently set at all. Another option would be:
- (NSString *)species {
NSString *result = [super species];
if (!result) {
result = @"Home sapiens";
}
return result;
}
This doesn't update the value if there is no value. It simply returns a default as needed.