首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Synthesize默认问题

@Synthesize默认问题
EN

Stack Overflow用户
提问于 2011-09-21 18:57:31
回答 3查看 617关注 0票数 2

我知道从Xcode4和LLVM2.0开始有了新特性"@syntesize default“

我尝试了以下代码:

代码语言:javascript
复制
@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标志,但它们不被识别)。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-21 19:01:19

苹果从非脆弱的ABI中删除了自动@synthesize功能,因为它导致了问题或编译器在尝试自动合成属性时存在不确定性。有关它的详细信息,请参阅this blog post

票数 5
EN

Stack Overflow用户

发布于 2011-09-21 19:01:20

@synthesize是必要的,不再需要单独的ivar声明。曾经有人计划@synthesize将是自动的,但由于存在问题,该计划没有实现。

票数 2
EN

Stack Overflow用户

发布于 2012-12-04 02:42:50

回顾一下这个答案,LLVM编译器的当前版本允许隐式合成。然而,使用当前的编译器(2012年底),如果您想指定一个ivar名称,则标量属性声明需要您在@synthesize语句中手动声明该属性。不知道他们为什么做出这样的区分。

还有一次你需要手动@synthesize一个属性,那就是在你导入到源代码中的类别中声明它的时候。

如果你想强制显式合成,有一个编译器标志:CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS,它不会阻止隐式合成的发生,但如果你想强制向后兼容,它会警告你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7498564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档