如何修改被readonly修飾的屬性

結論:atom

1.用KVC改變只讀屬性的值spa

2.若禁止KVC方式修改只讀屬性的值,可在對應類重寫類方法code

// 該方法默認返回YES。 即在不存在知足條件的存取方法時,容許直接訪問屬性對應的實例變量
+ (BOOL)accessInstanceVariablesDirectly { return NO; }

 

分析:對象

1.被readonly修飾的屬性,是沒有建立setter方法的,因此經過點語法修改屬性的值會報錯;blog

2.在類的實現文件裏,是能夠經過實例變量修改屬性的值;it

3.在類的外部文件裏,能夠經過KVC修改對象的只讀屬性的值。  io

 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
相關文章
相關標籤/搜索