ivar and property

成员变量

定义了一个类的全局变量(不直接被外部访问,只能通过方法读或写)

属性:

提供了getter和setter方法的成员变量(直接能被外部访问)

由此而知:当在OC里面默认申明一个属性,如果没有关联相应的成员变量会默认生成一个以下划线开头+属性名的成员变量

@property声明setter getter方法

@synthesize定义setter getter方法

在Xcode4.5及以后的版本中,可以省略@synthesize编译器会自动帮你加上setter getter方法,并且默认会去访问_age这个成员变量,如果找不到_age这个成员变量,会自动生成一个叫做 _age的私有成员变量。在.m文件中同时实现getter和setter方法时候需要@synthesize age = _age或者在.h文件里手写成员变量 NSString *_age

ivar:

1
typedef struct objc_ivar *Ivar;

objc_ivar结构体定义如下

1
2
3
4
5
6
7
8
struct objc_ivar {
char *ivar_name OBJC2_UNAVAILABLE;
char *ivar_type OBJC2_UNAVAILABLE;
int ivar_offset OBJC2_UNAVAILABLE;
#ifdef __LP64__
int space OBJC2_UNAVAILABLE;
#endif
}