iPhone模拟器:使用合成实例变量时构建错误

Phi*_*ert 13 iphone runtime properties objective-c

Cocoa/Objective-C有两个运行时:遗留运行时和"现代"运行时(这就是Apple所说的).

根据Apple的文档," Mac OS X v10.5及更高版本的iPhone应用程序和64位程序使用现代版本的运行时 ".

到现在为止还挺好.

现在,"现代"运行时支持一个名为"合成实例变量"的功能,这意味着您不必为每个声明的属性定义实例变量.实例变量将自动添加.引用来自iPhone参考库:" 对于现代运行时,实例变量根据需要合成.如果已经存在同名的实例变量,则使用它. "

如果您在iPhone应用程序中使用此功能,它会在iPhone(物理)设备上构建并运行良好,但是当您将目标更改为"iPhone模拟器"时,会出现构建错误:

合成属性"x"必须与兼容的ivar命名相同,或者必须明确命名为ivar

这里发生了什么?iPhone模拟器不是真正的iPhone模拟器吗?这是否意味着模拟器使用与物理iPhone不同的运行时?

如何在iPhone模拟器上使用此功能?

编辑:

定位iPhone模拟器时无法编译的代码是:

@interface MyClass : NSObject {
}

@property NSString *prop1;

@end
Run Code Online (Sandbox Code Playgroud)

根据文档,这应该在"现代"运行时工作正常,事实上它确实在iPhone设备上,但它在将目标更改为iPhone模拟器时无法编译.

Ben*_*itz 15

当前SDK(3.0)中的iPhone模拟器使用主机的运行时,它不支持32位模式下的合成ivars.@synthesize在模拟器修复之前,你必须使用你的ivars.(提交Apple请求此增强功能的错误是好的.)

  • 这是正确的 - 这是当前模拟器中的一个错误.有一个关于这个的SO话题(我找不到 - 也许它是一个cocoa-dev线程),还有这个:http://iphonedevelopment.blogspot.com/2009/06/runtime-madness.html (2认同)