我在尝试覆盖协议中的属性以使其变为可变时遇到了一些问题。
我有这个协议:
@protocol TheProtocol
@property (nonatomic, readonly) NSString *someString;
@end
这节课:
@interface SuperObject : NSObject <TheProtocol>
@end
合成变量如下:
@implementation SuperObject
@synthesize someString;
-(id)init {
if(self=[super init]) {
someString = [aString copy];
}
return self;
}
@end
因此可以在内部写入
然后我有一个子类:
@interface SubObject : SuperObject
@end
@implementation SubObject
@synthesize someString;
- (id)init {
if(self=[super init]) {
NSLog(@"Some string is %@",someString");
someString = [bString copy];
}
return self;
}
在我的子类中,尝试分配给someString不起作用。我尝试在我的子类中合成someString但是在我尝试修改它之前,当我打印出“someString”时,它会打印nil而不是“something”
回答
我想出了答案。最终有效的是:
@interface SuperObject : NSObject <TheProtocol> {
@protected
NSString *someString;
}
@end
答案 0 :(得分:1)
正在发生的事情是,当你在子类中合成时,分配的是不同于超类中的ivar。因此,打印时的值为nil
。您可以通过self.someString.
希望有所帮助。