我在使用属性时发现了一个奇怪的行为,该属性被继承为只读,然后在继承的类中重新声明为读写
In A.h
@interface A : NSObject
@property (nonatomic, strong, readonly) NSObject * someProperty;
@end
In B.h
@interface B : A
// no matter if here
// @property (nonatomic, strong, readwrite) NSObject * someProperty;
- (void)foo;
@end
In B.m
@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
calling
self.someProperty = [NSObject new];
导致代码在无法识别的选择器“setSomeProperty:”上崩溃
调查显示,即使声明为读写,设置器似乎也没有被合成
为什么会发生这种情况?编译器没有指示任何发生这种情况的警告,我也没有在任何记录此行为的地方找到