zoukankan      html  css  js  c++  java
  • 如何修改被readonly修饰的属性

    结论:

    1.用KVC改变只读属性的值

    2.若禁止KVC方式修改只读属性的值,可在对应类重写类方法

    // 该方法默认返回YES。 即在不存在满足条件的存取方法时,允许直接访问属性对应的实例变量
    + (BOOL)accessInstanceVariablesDirectly { return NO; }

     

    分析:

    1.被readonly修饰的属性,是没有创建setter方法的,所以通过点语法修改属性的值会报错;

    2.在类的实现文件里,是可以通过实例变量修改属性的值;

    3.在类的外部文件里,可以通过KVC修改对象的只读属性的值。  

     1 // .h
     2 @interface TestObject : NSObject
     3 @property (nonatomic, copy, readonly) NSString *testString;
     4 @property (nonatomic, assign, readonly) NSInteger testCount;
     5 
     6 - (void)show;
     7 @end
     8 
     9 // .m
    10 @implementation TestObject
    11 - (instancetype)init {
    12     if(self = [super init]) {
    13         _testString = @"test";
    14         _testCount = 0;
    15     }
    16     return self;
    17 }
    18 
    19 - (void)show {
    20     NSLog(@"testString is %@, testCount is %ld", _testString, _testCount);
    21 }
    22 @end
    1 // 外部文件
    2 TestObject *obj = [TestObject new];
    3 [obj show]; // testString is test, testCount is 0
    4 
    5 [obj setValue:@"TestObject" forKey:@"testString"];
    6 [obj setValue:@2 forKey:@"testCount"];
    7 [obj show]; // testString is TestObject, testCount is 2

     

  • 相关阅读:
    bzoj3473 字符串
    洛谷P4070 生成魔咒
    洛谷P3975 弦论
    AT1219 歴史の研究
    课上讲的几个新的技巧
    索引与视图(转载)
    oracle中的分支与循环语句
    Oracle to_date()函数的用法《转载》
    自定义函数的存储过程的区别
    UNION 和 UNION ALL 操作符
  • 原文地址:https://www.cnblogs.com/mustard22/p/11097506.html
Copyright © 2011-2022 走看看