美文网首页
iOS-修改readonly属性的值

iOS-修改readonly属性的值

作者: zwing | 来源:发表于2022-10-27 13:23 被阅读0次

    一般情况下,readonly属性的值是无法修改的,但可以通过特殊方式修改。修改本类readonly属性的值或者子类修改父类readonly属性的值,都可通过👇🏻方法实现:

    方法一:使用@synthesize实现

    在.m文件中加上@synthesize 属性名=_属性名; 就可以把属性的readonly改成readwrite了。

    #import "ZWViewController.h"
    
    @interface ZWViewController ()
    
    @property (nonatomic, copy, readonly) NSString *name;
    
    @end
    
    @implementation ZWViewController
    
    @synthesize name = _name;
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        _name = @"zwing";
        
        NSLog(@"%p --- %@", _name, _name);
        
        self->_name = @"Mr_Din";
    
        NSLog(@"%p --- %@", _name, _name);
    }
    
    2022-10-28 11:40:32.260188+0800 Go-Goal[6172:2987594] 0x104e525f8 --- zwing
    2022-10-28 11:40:32.260436+0800 Go-Goal[6172:2987594] 0x104e52638 --- Mr_Din
    
    方法二:使用kvc实现
    #import "ZWViewController.h"
    
    @interface ZWViewController ()
    
    @property (nonatomic, copy, readonly) NSString *name;
    
    @end
    
    @implementation ZWViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        _name = @"zwing";
        
        NSLog(@"%p --- %@", _name, _name);
        
        [self setValue:@"Mr_Din" forKey:NSStringFromSelector(@selector(name))];
        
        NSLog(@"%p --- %@", _name, _name);
    }
    
    2022-10-28 11:44:45.911732+0800 Go-Goal[6186:2989794] 0x1069525f8 --- zwing
    2022-10-28 11:44:45.912061+0800 Go-Goal[6186:2989794] 0x106952638 --- Mr_Din
    

    若想禁止kvc修改readonly属性的值,则可以在定义readonly属性的类中添加该方法

    + (BOOL)accessInstanceVariablesDirectly {
        return NO;
    }
    

    相关文章

      网友评论

          本文标题:iOS-修改readonly属性的值

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