2013-02-02 38 views
2

我在iTunesU课程中观看了美妙的Paul Haggerty for iOS开发(导致谁不需要刷新基础知识?),他说了一些我不知道的内容:在ios中使用@synthesize应用程序

“我们永远不会访问下划线(_符号)变量”

然后,他接着谈如何当您使用@财产来声明变量,​​被这就是幕后生成的代码由编译器,以及二传和吸气。本质上,代码永远不会出现在你的应用程序中。

在所有我迄今写我的iOS应用,我始终声明用我的头文件@property@synthesize VARIABLE_NAME = _VARIABLE_NAME;我的变量,因为看演讲,我现在困惑,我是否应该在使用@synthesize我代码。

我应该只使用属性声明吗?如果我在代码中使用合成声明,它有什么不同?

既然哈格蒂先生不使用它,那我为什么呢? (考虑到他是iOS的半神)。我非常觉得做我一直在做的事情是不好的形式。

有人在乎澄清这个问题吗?

+1

备份变量合成是自动的,因此@synthesize已被有效地弃用。真的,你只需要声明一个支持iVar的名字而不是自动合成的名字(反正这是一个糟糕的做法)。删除他人全部,并清理你的变量访问。什么都不应该改变 – CodaFi

+0

可能重复[自动@synthesized属性在Xcode 4.4](http://stackoverflow.com/questions/11666008/automatically-synthesized-properties-in-xcode-4-4) – CodaFi

+0

@CodaFi,什么是支持变量? –

回答

7

Xcode 4.0 Developer Preview 4 Release Notes.添加属性的默认自动合成(iOS和64位OS X)。您不需要编译器的实现部分中的@synthesize指令来合成已声明属性的访问器。

所以,如果你忽略它

@synthesize ivar = _ivar; 

是完全一样的。

+1

那真是太棒了。真的很高兴知道这一点。 Upvote如果你想;) – barndog

+0

@shadow抱歉,一些错误的信息只是检查发布说明,发现它自4.0以来就存在。希望你检查这些注意事项:)(编辑我的答案) –

+0

好棒!是的,我想知道这是怎么回事,因为我看到的所有代码,github上的东西以及whatnot都使用了合成声明。苹果真的需要更加开放地了解他们的变化,而不仅仅是WWDC:P – barndog

2

不再需要合成。今年的WWDC会议也讨论了这一点。只需使用属性。

+0

有时你必须:http://stackoverflow.com/a/14658336/412916 – Jano

+0

有趣的..很高兴知道... – Rob

2

不包括“@synthesize VARIABLE_NAME = _VARIABLE_NAME”将执行完全相同的事情,因为如果您不添加任何内容,编译器会自动添加它。

2

使用Xcode 4.5或更高版本。 IDE为您写入@synthesize声明。

@synthesize声明仅为您编写settergetter

that,_variable_name是即时变量。

variable_name只是一种默认情况下返回值_variable_name的方法。

默认情况下使用variable = <Statement or value>. its calling the setVarable_Name method to set the _variable_name`时。

希望它有帮助。

相关问题