在新手刚刚接触ios的时候会发现这样一个定义的方法
@interface MyViewController :UIViewController
{
UIButton *myButton;
}
@property (nonatomic, retain) UIButton *myButton;
@end
为输出口同时声明了属性和底层实例变量,这种语法是存在老版本的ios语法中,要求属性必须声明与之对应的实例变量。
但是,现在苹果将默认的编译器从GCC转换为LLVM(low level virtual machine),就不再需要为属性声明实例变量了,如果LLVM发现一个没有匹配实例变量的属性,它将自动创建一个以下划线开头的实例变量,例如上面的_myButton。
在.m文件中直接使用_myButton或者self.myButton。
但是如果没有属性的声明,只有实例变量的声明,那么在.m文件中就应该是使用self->myButton。
最后还有一个问题就是与@property对应的@synthesize方法在.m文件中声明后,可以直接使用myButton,未声明的情况下是_myButton。
最后斯坦福公开课白胡子老爷爷都是声明的属性,然后在.m文件中
if (!_myButton)
{
_myButton = [UIButton alloc]init];
}