NSObject 的 performSelector
是 Objective-C 运行, 可以使用此方法更改一个对象的只读属性。如下 AK
类 name
属性被神明为只读并且在初始化时赋值 为 TOM。
@interface AK : NSObject
@property(nonatomic, strong, readonly)NSString *name;
@end
@interface AK()
@property(nonatomic, strong, readwrite)NSString *name;
@end
@implementation AK
-(instancetype)init {
self = [super init];
if (self) {
_name = @"TOM";
}
return self;
}
@end
在 AppDelegate 中的 didFinishLaunchingWithOptions 方法中构造一个 AK
对象 ak
, 并打印 name 。
AK *ak = [[AK alloc] init];
NSLog(@"%@", ak.name);
此时可以看到 ak 输出值 为 TOM。如果在接下来调用 performSelector
方法 则可以成功修改 只读属性 name 值从 TOM 到 Zack。
[ak performSelector:@selector(setName:) withObject:@"Zack"];
NSLog(@"%@", ak.name);
这种通过 NSObject 的
performSelector
修改一个只读属性的方法仅限于用类扩展从新申明 name 为 readonly 的情况。
网友评论