我在使用属性时发现了一个奇怪的行为,该属性被继承为只读,而不是在继承的类中重新声明为 readwrite
在啊
@interface A : NSObject
@property (nonatomic, strong, readonly) NSObject * someProperty;
@end
在Bh
@interface B : A
// no matter if here
// @property (nonatomic, strong, readwrite) NSObject * someProperty;
- (void)foo;
@end
在Bm
@interface B()
// no matter if here
@property (nonatomic, strong, readwrite) NSObject * someProperty;
@end
@implementation B
- (void)foo {
NSLog(@"%@", self.someProperty);
// crash here with unrecognized selector setSomeProperty:
self.someProperty = [NSObject new];
}
@end
打电话
self.someProperty = [NSObject new];
导致代码在无法识别的选择器“setSomeProperty:”上崩溃
调查显示,看起来 setter 没有被合成,即使声明为 readwrite
为什么会这样?编译器没有指出发生这种情况的任何警告,我也没有在任何记录此行为的地方找到