美文网首页
使用 performSelector 修改只读属性值

使用 performSelector 修改只读属性值

作者: 张科_Zack | 来源:发表于2021-08-27 15:27 被阅读0次

    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 的情况。

    相关文章

      网友评论

          本文标题:使用 performSelector 修改只读属性值

          本文链接:https://www.haomeiwen.com/subject/zgumiltx.html