使用 performSelector 修改只读属性值

2021-08-27  本文已影响0人  张科_Zack

NSObject 的 performSelector是 Objective-C 运行, 可以使用此方法更改一个对象的只读属性。如下 AKname 属性被神明为只读并且在初始化时赋值 为 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 的情况。

上一篇下一篇

猜你喜欢

热点阅读