0

可能重复:
我为什么要使用@properties?
何时在目标 C 中使用属性?

我已经用 Objective-c 编程一年多了,我一直觉得使用 @property 和 @synthesize 是一种惯例。但它们真正服务的目的是什么?它们是否仅用于在类之间进行交流?因此,例如,如果我仅在声明它的类的范围内使用 NSMutableDictionary,那么省略是否可以?

另一个问题:

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

4

3 回答 3

6

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

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

它们是否仅用于在类之间进行交流?

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

因此,例如,如果我仅在声明它的类的范围内使用 NSMutableDictionary,那么省略是否可以?

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

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

取决于您如何声明财产。

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

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

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

使用属性的规则是什么?

这你需要阅读文档

于 2012-05-22T12:17:57.267 回答
1

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

于 2012-05-22T12:19:03.360 回答
0

物业只是让您的生活更轻松。

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

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

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

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

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

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

舒尔它只是冰山一角,但它几乎可以满足您的一切需求。

于 2012-05-22T12:26:51.857 回答