我知道从Xcode4和LLVM2.0开始有了新特性"@syntesize default“
我尝试了以下代码:
@interface PDFPage : NSObject
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) int page;
@end
@implementation PDFPage
-(void)dealloc
{
[self.name release];
[super dealloc];
}
@end我假设@synthesize不再是必需的,但是编译器(Apple LLVM2.1)给了我一个警告,比如' warning : property 'page‘要求定义方法'page’- use @synthesize,@dynamic or provide a method implementation‘
我还需要做些什么才能在默认情况下启用@synthesize?(我还尝试了-Xclang -fobjc-nonfragile-abi2标志,但它们不被识别)。
谢谢
发布于 2011-09-21 19:01:19
苹果从非脆弱的ABI中删除了自动@synthesize功能,因为它导致了问题或编译器在尝试自动合成属性时存在不确定性。有关它的详细信息,请参阅this blog post。
发布于 2011-09-21 19:01:20
@synthesize是必要的,不再需要单独的ivar声明。曾经有人计划@synthesize将是自动的,但由于存在问题,该计划没有实现。
发布于 2012-12-04 02:42:50
回顾一下这个答案,LLVM编译器的当前版本允许隐式合成。然而,使用当前的编译器(2012年底),如果您想指定一个ivar名称,则标量属性声明需要您在@synthesize语句中手动声明该属性。不知道他们为什么做出这样的区分。
还有一次你需要手动@synthesize一个属性,那就是在你导入到源代码中的类别中声明它的时候。
如果你想强制显式合成,有一个编译器标志:CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS,它不会阻止隐式合成的发生,但如果你想强制向后兼容,它会警告你。
https://stackoverflow.com/questions/7498564
复制相似问题