访问属性和访问实例变量的区别

Posted Gabriel_Lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问属性和访问实例变量的区别相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

以上是关于访问属性和访问实例变量的区别的主要内容,如果未能解决你的问题,请参考以下文章

属性存取直接访问实例变量

iOS 开发:成员变量(属性,实例变量)的相关知识

ios 中 成员变量和属性的区别

直接访问实例变量与使用访问器方法

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

属性和实例变量的最佳实践