财产声明和自动备份存储分配

Ava*_*his 11 iphone objective-c

我正在尝试理解Objective-C属性,并且我对它们的语法有一些挥之不去的问题.

明确为这样的属性声明一个ivar有什么区别:

@interface myObject1 : NSObject {
  NSString *title;
}
@property (copy) NSString *title;
@end
Run Code Online (Sandbox Code Playgroud)

还有这个:

@interface myObject2 : NSObject {
}
@property (copy) NSString *title;
@end
Run Code Online (Sandbox Code Playgroud)

myObject2示例似乎有效.是否可以在myObject2中实现属性,或者是否应始终明确定义关联的ivar?

没有明确宣布伊娃的影响是什么?

Lou*_*arg 13

在现代Objective C运行时(nonfragile-abi)它们是相同的,ivar支持将由@synthesize声明自动创建.这是iPhone和64位Mac OS X应用程序使用的运行时.32位Mac OS X使用遗留运行时,无法合成ivar,而您编写的第二位代码将无法正确编译.

最新版本的iPhone模拟器使用现代运行时,但较旧的版本不使用.因此,虽然两个代码示例都适用于实际的iPhone(合成必要的存储),但第二个示例将无法为模拟器编译,除非您拥有最新的Xcode.