博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
访问属性和访问实例变量的区别
阅读量:4317 次
发布时间:2019-06-06

本文共 549 字,大约阅读时间需要 1 分钟。

1、由于不经过Objective-C的“方法派发”(method dispatch)步骤,所以直接访问实例变量的速度会比较快。在这种情况下,编译器所生成的代码会直接访问保存对象实例的那块内存;

2、直接访问实例变量时,不会调用其“设置方法”,这就绕过了为设置相关属性所定义的“内存管理语义”;

3、如果直接访问实例变量,那么不会触发“键值观察”(key-Value Observing,KVO)通知。这样做是否会产生问题,还取决于具体的对象行为。

因此合理的折中方案是:在写入实例变量时,通过其“设置方法”来做,而在读取该实例变量时,则直接访问。此办法既能提高读取操作的速度,又能控制对属性的写入操作。之所以要通过“设置方法”来写入实例变量,其首要原因在于,这样能够确保相关属性的“内存管理语义”得以贯彻。但是选用这种做法需要注意几个问题:

1、在init方法和dealloc方法中总是应该直接访问实例变量,因为子类可能会“覆写”(override)设置方法;

2、“惰性初始化”(lay initialization),在这种情况下,必须通过“获取方法”来访问属性,否则,实例变量就永远不会初始化。

转载于:https://www.cnblogs.com/drbbq/p/5343325.html

你可能感兴趣的文章
预培训-阅读-快速阅读并提问
查看>>
拓展KMP以及模板
查看>>
洛谷 P3049 Landscaping ( 贪心 || DP)
查看>>
洛谷 P1059 明明的随机数
查看>>
python 基础大纲
查看>>
window自动任务实现数据库定时备份
查看>>
Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载(2011年5月12日更新版)
查看>>
javascript操作cookie
查看>>
深入理解HTTP协议(转)
查看>>
NHibernate讲解
查看>>
客户端—表单验证信息—并能否提交到数据库
查看>>
Android开发环境搭建(原创)
查看>>
java IO流 对文件操作的代码集合
查看>>
js / jquery 获取和设置 FCK Editor 的值
查看>>
OpenJudge计算概论-与7无关的数
查看>>
proxy-target-class="true" 与proxy-target-class="false"的区别
查看>>
npm安装包很慢
查看>>
jquery是如何清除ajax缓存的
查看>>
Android核心分析(转载)
查看>>
自学_HTML<一>
查看>>