什么时候使用@property?

时间:2012-05-22 12:00:24

标签: iphone objective-c ipad properties

  

可能重复:
  Why should I use @properties?
  When to use properties in objective C?

我已经在objective-c中编程了一年多一点,我觉得使用@property和@synthesize这是一个惯例。但他们真正服务的目的是什么?他们是否只是在课堂之间进行沟通?因此,例如,如果我仅在声明它的类的范围内使用NSMutableDictionary,则遗漏是O.K. ?

另一个问题:

如果我设置了NSMutableDictionary的属性,它会被保留,对吧?所以,在我的课上我不必调用alloc()和init(),是吗? 使用属性的规则是什么?

3 个答案:

答案 0 :(得分:6)

  

但他们真正服务的目的是什么?

对iVars的访问控制以及表示和基础数据之间的抽象。

  

他们是否只是在课堂之间进行沟通?

不,它们适用于您希望控制对iVar的访问而不是直接访问它们,或者您将来可以更改基础数据结构但希望保留当前表示的时候。

  

所以,例如,如果我只在声明它的类的范围内使用NSMutableDictionary,那么遗漏就是O.K。

这取决于。您想要控制访问iVar吗?您的代码是否可以更改,以便获取字典而不是直接的iVar。通常,答案是肯定的。

  

如果我设置NSMutableDictionary的属性,它会被保留,对吗?

取决于您如何申报该财产。

  

所以,在我的课堂上,我不必调用alloc()和init(),是吗?

你这里有粗心的措辞。我想你在问你是否还需要构建一个属性的实例。是的,您需要以某种方式构造属性的实例。有很多方法可以做到这一点。

注意:谈论方法的惯例是使用它们的签名。您可以使用-alloc。而不是alloc()。

  

使用属性有哪些规则?

您需要阅读doc for。

答案 1 :(得分:1)

与其他语言一样,当我们想要将变量设为全局变量或公共变量时,我们使用公共访问修饰符。在Objective c中,当我们想要访问其他类中的另一个类变量时,我们使用@property和@synthesize它们。基本上@synthesize是编译器为该变量创建setter和getter方法的方式。您可以手动创建它们但不使用@synthesize。   通过创建该类的对象,您可以在其他类中访问您的属性变量。  通过使用retain,您可以清除内存并且在容器类未被处置或释放之前不存在。

答案 2 :(得分:0)

属性只会让您的生活更轻松。

如今在内存管理,代码风格和节省时间方面尽可能多地使用属性。

@property做了什么? 他们可以创建getter和setter方法(取决于给定的参数)。

通常在头文件中声明实例变量(如c ++中) 现在你只需要它,而不是声明实例变量所需的属性。

属性可以获得多个参数 对于普通的objective-c对象,你需要一个指针(*),你会写 @property (nonatomic,retain,...)

当你@synthesize时,它会创建一个吸气剂和一个定位器 setter会自动执行释放旧对象,变量保持并保留新对象等内容 因此,您不必手动执行此操作(通常应该是这种情况)。这很重要。
你也可以给它参数(readonly,readwrite)来决定是否设置一个setter 您甚至可以在头文件中只读声明@property并在实现文件中使用扩展名(没有名称的类别)覆盖它。

要深入了解这一点,请阅读Apple开发人员手册,这些手册非常有效。 希望有点帮助。

Shure它是冰山一角,但它主要是你需要的一切。