readonly:只讀屬性,只生成getter方法俱饿,也就是說只能訪問變量琉兜,不能修改。
那我們?nèi)绻胍淖冾愔新暶鳛閞eadonly的屬性值該怎么做呢院仿?
如果直接用屬性的setter方法秸抚,那么就直接報(bào)錯,提示不能給聲明為readonly的屬性賦值意蛀。
這個時候我們可以用KVC來給聲明為readonly的屬性重新賦值耸别。
例:
Dog.h
@interface Dog: NSObject
@property (nonatomic, assign, readonly) NSInteger num;
@property (nonatomic, copy, readonly) NSString *name;
- (instancetype)initNum:(NSInteger)num name:(NSString *)name ;
@end
*******
Dog.m
@implementation Dog
- (instancetype)initNum:(NSInteger)num name:(NSString *)name {
self = [super init];
if (self) {
_num=num;
_name=[name copy];
}
return self;
}
************************
Dog *dogOne=[[Dog alloc]initNum:1 name:Tom];
如何修改dogOne對象的name屬性值為Jerry。
dogOne=@“Jerry”//會直接報(bào)錯县钥,不能給聲明為readonly的屬性賦值
用KVC
[dogOne setValue:@"Jerry" forKey:NSStringFromSelector(@selector(name))];
NSlog(@" dogOne name=%@",dogOne.name);
運(yùn)行結(jié)果
dogOne name=Jerry
修改成功P憬恪!若贮!