iOS在类内部怎么访问实例变量比较好?

综合技术 2017-10-12

OC在类文件的内部访问实例变量,有直接访问和使用getter/setter方法访问两种方式,它们的区别有:

1、直接访问不经过OC的方法分发(method dispatch),所以访问速度比较快,在这种情况下,编译器所生成的代码会直接访问保存对象实例变量的那块内存。

2、直接访问实例变量时,不会调用setter方法,这样就绕过了为相关属性所定义的内存管理语义。例如在ARC下面直接访问一个声明为copy的属性,就不会拷贝该属性,只会保留新值释放旧值。

3、如果直接访问实例变量,不会触发键值观察(key-value observing)通知。

4、通过属性的getter/setter访问可以通过设置断点帮助调试错误。

综上所述,推荐在写入实例变量时使用setter,在读取时使用直接访问的方式。

当然,如果属性使用了lazy initialization,那就需要通过getter/setter来访问了。

您可能感兴趣的

Having a problem with the object returned by NSUse... I'm new to ios programming and just started learning this last month. There is one problem that I've been in stuck with for the last two days. I ...
Validation PNG on iOS Writing a mapping application on iOS, making use of OpenStreetMap tiles. Map tile images are downloaded asynchronously and stored in a dictionary, or ...
PNChart:一个简洁高效的iOS图表库 1.要求 PNChart 依赖于下列框架,在使用前请导入这些框架(ps:至于怎么导入,这里就不说了): Foundation.framework UIKit.framework CoreGraphics.framework QuartzCore.framew...
ScrollViewWillBeginDragging: Not to be c... I have an UIView in which an UICollectionview is there. For knowing the scroll distance of UICollectionview I used scrollViewWillBeginDra...
ijkPlayer编译、打包、多格式及Https支持 编译环境 macOS + Xcode,文末有我打包好的文件,需要请自行下载 准备工作 # 安装 homebrew、 git、 yasm (如果已经安装好可以跳过, 不清楚的可以再来一遍) # 依次执行以下命令 ruby -e "$(curl -fsSL https://raw.gi...
0
博客园精华区

责编内容来自:博客园精华区 (本文源链)
阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。