如何修改被readonly修饰的属性
结论:
1.用KVC改变只读属性的值;
2.若禁止KVC方式修改只读属性的值,可在对应类重写类方法
// 该方法默认返回YES。 即在不存在满足条件的存取方法时,允许直接访问属性对应的实例变量
+ (BOOL)accessInstanceVariablesDirectly {
return NO;
}
分析:
1.被readonly修饰的属性,是没有创建setter方法的,所以通过点语法修改属性的值会报错;
2.在类的实现文件里,是可以通过实例变量修改属性的值;
3.在类的外部文件里,可以通过KVC修改对象的只读属性的值。
// .h
@interface TestObject : NSObject
@property (nonatomic, copy, readonly) NSString *testString;
@property (nonatomic, assign, readonly) NSInteger testCount; - (void)show;
@end // .m
@implementation TestObject
- (instancetype)init {
if(self = [super init]) {
_testString = @"test";
_testCount = ;
}
return self;
} - (void)show {
NSLog(@"testString is %@, testCount is %ld", _testString, _testCount);
}
@end
// 外部文件
TestObject *obj = [TestObject new];
[obj show]; // testString is test, testCount is 0 [obj setValue:@"TestObject" forKey:@"testString"];
[obj setValue:@ forKey:@"testCount"];
[obj show]; // testString is TestObject, testCount is 2
如何修改被readonly修饰的属性的更多相关文章
- C#中const 和 readonly 修饰符的用法详解
1.const是不变常量,在编译的时候就需要有确定的值,只能用于数值和字符串,或者引用类型只能为null.(这里为什么要把字符串单独拿出来?是因为字符串string是引用类型,但是使用的时候却感觉是值 ...
- Static和Final修饰类属性变量及初始化
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那 ...
- C# static readonly 修饰符初始化变量
同事问了一个问题,readonly和static啥区别? 我就写了个demo运行了下: /*** * 验证初始化次数:static只初始化一次,无论多少用户访问,在内存中只有一份 * readonly ...
- jquery attr()方法 添加,修改,获取对象的属性值。
jquery attr()方法 添加,修改,获取对象的属性值. jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到 ...
- 关于自定义tabBar时修改系统自带tabBarItem属性造成的按钮顺序错乱的问题相关探究
关于自定义tabBar时修改系统自带tabBarItem属性造成的按钮顺序错乱的问题相关探究 测试代码:http://git.oschina.net/Xiyue/TabBarItem_TEST 简 ...
- JS 对象API之修改、删除对象的属性
无论是修改还是删除对象的属性,我们首先要清楚:自有属性.共有属性的处理方法肯定是不同的: 先创建一个对象实例 var obj = { name: '小马扎', age: }; Object.proto ...
- Java反射-修改字段值, 反射修改static final修饰的字段
反射修改字段 咱们从最简单的例子到难, 一步一步深入. 使用反射修改一个private修饰符的变量name 咱们回到主题, 先用反射来实现一个最基础的功能吧. 其中待获取的name如下: public ...
- 使用static关键字修饰一个属性
//使用static关键字修饰一个属性 //static作用: //static:静态 //1.使用static关键字修饰一个属性,声明为static的变量本质就是一个全局变量; //2.静态变量或方 ...
- Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...
随机推荐
- WebJars简介 —— 前端资源的jar包形式(以后接触到再深入总结)
对于日常的web开发而言,像css.js.images.font等静态资源文件管理是非常的混乱的.比如jQuery.Bootstrap.Vue.js等,可能每个框架使用的版本都不一样.一不注意就会出现 ...
- C++——二维vector初始化大小方法
初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到) vector<vector<int> > newOne(r, vector&l ...
- shell 脚本 for,while,case 语句详解及案例
################for循环语句的结构#############使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环. ...
- Linux DNS分离解析与构建智能DNS服务器
一 构建DNS分离解析 方法一 : [root@localhost ~]# vim /etc/named.conf [root@localhost ~]# cd /var/named/ [root@l ...
- [LeetCode] 327. Count of Range Sum 区间和计数
Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Ra ...
- AntDeploy发布前端项目到IIS(脱离vs单独使用)
AntDeploy AntDeploy是一款开源的一键发布部署工具,目的是代替重复性的发布动作,提高部署效率 1.一键部署iis 2.一键部署windows服务 3.一键部署到Docker 4.支持增 ...
- SpringBoot系列之profles配置多环境(篇一)
SpringBoot profles配置多环境 23/100 发布文章 u014427391 软件环境简介 这里介绍一下SpringBoot提供的profiles属性加上maven配置一下多环境,在实 ...
- [转帖]centos 7 avahi-daemon服务的作用及如何关闭
centos 7 avahi-daemon服务的作用及如何关闭 https://blog.csdn.net/tjjingpan/article/details/81237308 关闭 systemct ...
- 前端学习:学习笔记(JS部分)
前端学习:学习笔记(JS部分) 前端学习:JS学习总结(图解) JS的简介 JS基本语法 JS内置对象 JS的函数 JS的事件 JS的BOM JS的DOM JS的简介 新建步骤 <body ...
- thinkphp3.2.3集成phpexcel1.8导出设置单元格合并
1 到这里下载classes里面的文件 https://github.com/PHPOffice/PHPExcel 2 然后放到 thinkphp的vendor 新建一个文件夹 Phpexcel 然 ...