Iphone 何时使用@property?

Iphone 何时使用@property?,iphone,objective-c,ipad,properties,Iphone,Objective C,Ipad,Properties,可能重复: 我已经用objective-c编程一年多了,我一直觉得使用@property和@Synthesis是一种惯例。但他们真正的目的是什么?他们是否只在班级之间交流?例如,如果我只在声明NSMutableDictionary的类的范围内使用它,那么省略就可以了 另一个问题: 如果我设置NSMutableDictionary的属性,它会被保留,对吗?所以,在我的类中,我不必调用alloc()和init(),是吗? 使用属性的规则是什么 但他们真正的目的是什么 对IVAR的访问控制以及表示

可能重复:

我已经用objective-c编程一年多了,我一直觉得使用@property和@Synthesis是一种惯例。但他们真正的目的是什么?他们是否只在班级之间交流?例如,如果我只在声明NSMutableDictionary的类的范围内使用它,那么省略就可以了

另一个问题:

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

但他们真正的目的是什么

对IVAR的访问控制以及表示和底层数据之间的抽象

他们是否只在班级之间交流

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

例如,如果我只在声明NSMutableDictionary的类的范围内使用它,那么省略就可以了

视情况而定。您想控制对iVar的访问吗?您的代码是否可能更改,以便获取字典而不是直接iVar。通常,答案是肯定的

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

取决于您如何声明属性

所以,在我的类中,我不必调用alloc()和init(),是吗

你的措词太草率了。我想你是在问你是否还需要构造一个属性的实例。是的,您需要以某种方式构造属性的实例。有很多方法可以做到这一点

注意:谈论方法的惯例是使用它们的签名。您将使用-alloc代替alloc()

使用属性的规则是什么


这需要阅读for.

和其他语言一样,当我们想要使变量成为全局变量或公共变量时,我们使用公共访问修饰符。在目标c中,当我们想要访问另一个类中的另一个类变量时,我们使用@property并@synthesis它们。基本上,@synthesis是编译器为该变量创建setter和getter方法的方法。您可以手动创建它们,但不能使用@synthesis。 通过创建该类的对象,您可以访问其他类中的属性变量。
通过使用retain,您可以清除发生在内存中的内容,并且在容器类未进行dispose或Release之前不存在该内容

房产只会让你的生活更轻松

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

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

通常在头文件中声明实例变量(如在c++中)。
现在,您只需简单地将其放在一边,而不是声明您想要作为实例变量的属性

属性可以获取多个参数。
对于普通的objective-c对象,您需要一个指针(*),您可以编写它。
@属性(非原子、保留等)

当您合成时,它会创建一个getter和setter。
setter会自动执行一些操作,例如释放旧对象、保存变量并保留新对象。
因此,您不必手动执行此操作(通常情况下应该是这样)。这很重要。
您还可以为它提供参数(readonly、readwrite),以决定是否设置setter。
您甚至可以在头文件readonly中声明一个
@property
,并使用扩展名(一个没有名称的类别)覆盖实现文件中的属性

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


舒尔是冰山一角,但它大部分是你需要的。

当你记得一个<代码> @属性< /Cord>声明只是声明“代码> -SETFO:和 -Foo方法时,这个问题本质上是与C++和java等其他语言一样永远被问到的问题:“您应该使用访问器方法还是直接访问实例变量?“。在Objective-C的例子中,还有安全内存管理的问题。我已经知道,getter和setter是设置好的。但引擎盖下还会发生什么?如果我只声明一个NSMutableDictionary w/o@property,我还能像以前一样在类中使用它吗?“我不想让其他班级知道他们的情况。”米克韦勒不太一样;非常重要的是要记住,您几乎从未在objective-c中直接访问IVAR,