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请求此增强功能的错误是好的.)
归档时间: |
|
查看次数: |
8750 次 |
最近记录: |