属性和实例变量的作用都是声明一个全局的变量,为了当前类中或其他类使用更加方便。
iOS 5之前使用GCC编译方式申明
属性:
@interface MyViewController {
UIButton *_button;
}
@property (strong, nonatomic) UIButton *button;
@synthesize button;// button = _button;
@end
/* GCC下申明属性必须要有对应的实例变量
@synthesize作用:
1.让编译器为你自动生成setter与getter方法
2.可以指定与属性对应的实例变量
使用synthesize制定属性对应的实例变量时,需要使用self->xxx才能访问对应的实例变量
@synthesize button = _button 指定的实例变量,要与属性对应的实例变量相同
否则使用self.button调用,编译器会告诉你,self.button = nil
*/
iOS 5之后,编译器从GCC转换为LLVM(low level virtual machine),使用LLVM(low level virtual machine),此后我们申明属性不在需要对应的实例变量,编译器会帮我们自动设置下划线_button,同时setter与getter方法同样编译器处理。
@interface MyViewController
@property (strong, nonatomic) UIButton *button;
@end
/*使用LLVM后,废弃之前的写法*/
网友评论