为什么我应该使用@properties?

可能重复:
什么描述@property(…)最好? 那真的有什么好处?

如果我在我的类接口中声明一个variables,我可以在我的类的任何地方使用这样的variables。 真棒。

如果我使用@property (retain) Something *myVar; 我可以用self.myVar访问这个variables…但是,有什么区别? 有没有很好的理由我应该使用这种或那种方法?

简短的回答:内存pipe理的封装。

较长的回答:如果您想稍后使用,则需要build立对象的所有权。 如果你想稍后使用它,你需要一个引用来做到这一点,而保持引用的一个好地方是在一个实例variables中。

可以处理所有权声明(即保留和释放),每当你为它指定一个新的值,但是会留下很多重复和麻烦的样板代码散落在整个地方,像水果蛋糕中的樱桃。 这种混乱是非常难以debugging的时候(不是如果)出了问题。 所以,将代码封装在访问器方法中要好得多,所以你可以写一次然后忘记它。

但是accessor方法也大多是样板文件,所以我们使用@property声明来自动创build它们,而不是手工编写它们。

编辑 :Apple的内存pipe理指南提供了许多有关@property生成的访问器方法在幕后执行的细节。

如果我使用@property(retain)Something * myVar; 我可以用self.myVar访问这个variables…但是,有什么区别?

 @property (retain) Something *myVar; // this property declaration declares: - (Something *)myVar; // and - (void)setMyIvar:(Something *)arg; // and is accessible by dot syntax. // it also declares and/or documents how the ivar is managed (copy, retain, etc.) 

正在使用:

 // direct access to the ivar. zero additional overhead (with regard to accessing the ivar) [myVar message]; // properties used with dot syntax invoke the accessor. therefore, [self.myVar message]; // is the same as: [[self myVar] message]; 

该属性的属性也向编译器提供了关于如何合成访问器的指示。

有没有很好的理由我应该使用这种或那种方法?

在init和dealloc中,直接访问ivar – 你有兴趣初始化和清理对象的ivars,不关心子类。 在这里使用属性也可以引入错误或未定义的行为。

对于其他情况,也就是说,当对象处于完全构build状态时,应该始终使用访问器来保持一致性。 如果一个子类覆盖访问者,直接访问伊娃可能会破坏devise。

如果你想避免这种情况,那么把伊娃变成私人的,不要为此申报财产。 如果你确实声明了一个属性,那么logging它是私有的; 我通常会写@property (retain) Something * private_myIvar; 在这种情况下。 在这种情况下,使用属性来合成伊娃的内存pipe理是很方便的。

当伊娃是私人的,你可以完全访问它。 直接或私人财产是安全的。 否则,假设你必须使用访问器。

如果myIvar被声明为private,并且只在初始化时创build,则可以避免完全声明这些属性。 这将减less运行时间的开销(如果这是关键的话)。 消息开销,保留/释放周期和primefaces将(自然)需要更多的执行时间。 所以可以绕过来提高性能。

可见性/维护。 有时,从界面上隐藏伊娃的维护/实施远远不够。 在其他情况下,ivar是类的实现细节,不应该是公共接口的一部分。 在这种情况下,请考虑将其设置为私有(有几种方法可以在objc中使用这个方法)。

使用@property来访问你的ivars,会做很多重复的代码释放和保留对象给你。 你不必使用它们。 这只是很多的教程,使这个平台的新手变得简单。