之前聊到@property 的用法时,曾提到@Property 的变化是因XCode的变更引起的, 究其根本原因, 是XCode所用编译器发生变化造成的。
在XCode4之前,Apple 所用的编译器是 GNU C Compiler (简称 GCC)。 自XCode4 后, Apple 将XCode的编译器改为 Low Level Virtual Machine (LLVM)。
在GCC编译器时代, 声明一个@property时,必须为这个property创建一个实例变量(instance variable);
而在LLVM时代,不一定非得为这个@property创建实例变量, 当LLVM没有找到这个property对应的实例变量时,会自动地为它创建一个。这个在后台自动创建的实例变量,与@property 声明的变量,区别仅差一个下划线 (_)。
代码示例: @property (copy, nonatomic) NSString *myName;
默认隐藏创建的实例变量为: _myName; 你直接调用这个_myName 实例变量, 是完全可用的 。
比如: 在.m 文件中,进行以下操作: _myName = @"This is my name"; 等同于 self.myName= @"This is my name";
小结:
了解下 Xcode的编译器历史,有助于理解为什么Xcode 中的某些语法经常变来变去。 @Property的变化是其中之一。类似变化有: 在基于storyboard 创建的 tableview 中,自Xcode4 之后, 也无需判断可重用的cell 是否为空了。