属性(property)与成员变量(ivar)区别

项目中有很多这种情况:
Mou icon
下划线成员变量和@property声明属性并存,那么这两者的区别是什么呢?什么时候该用下划线,什么时候该用@property?

1.区别

  1. Xcode4.5版本后,@property声明的属性,会自动生成一个带下划线的成员变量,以及这个变量的setter和getter方法;而下划线变量仅仅是一个变量而已,没有所谓的setter和getter方法
  2. 在访问数据的时候,@property声明的属性可以使用点方法 self.xxx,根据具体情况调用setter和getter方法,如果使用下划线+变量名,不会调用setter,getter方法;而下划线声明的变量只能用变量名在访问数据。

2.用法

  1. 如果你想使用一个属性的setter或者getter方法,就使用@property
  2. 如果仅仅是一个变量,不需要setter getter方法,那么可以直接声明一个下划线变量就够了,不需要浪费资源。