在iOS的第一个版本时,property是OC语言的一项新特性,在声明property之前必须首先声明与之对应的成员变量。
@interface ViewController : UIViewController
{
UIButton * button;
}
@property (nonatomic, strong) UIButton * button;
@end
在iOS5后,苹果将默认编译器由GCC转换为LLVM(low level virtual machine),从此就不需要为属性声明成员变量了。LLVM如果发现一个属性没有匹配的实例变量,它将自动创建一个以下划线开头的成员变量,同时需要和@synthesize(写在.m文件中,编译器会自动生成对应的set和get方法
)搭配使用。
而在下面的代码中:
@interface ViewController : UIViewController
{
UIButton * button;
int count;
id data;
}
@property (nonatomic, strong) UIButton * button;
@end
在{ }内所声明的变量都是成员变量,所以button、count、data都是成员变量。因为成员变量没有set、get方法,所以成员变量用于类内部,无法与外界接触,也就是说,成员变量是类专属的、私有的。
那实例变量是什么呢?
实例变量本质上是成员变量,是成员变量的一种特殊情况,实例变量本质上就是成员变量,只是实例是针对类而言,实例是指类的声明。{ }中的button和data是实例变量(以为id是OC特有的类,本质上江id等同于(void *))
综上所述:
成员变量是定义在{ }中的变量,是类私有。包含实例变量和基本数据类型变量。
实例变量是成员变量的一种特殊情况,其类型是OC的一个类。
property是用于和其他对象进行交互的变量,在声明property时,编译器会自动创建一个以下划线开头的成员变量
网友评论