2

我从 obj-c 开始,有一些我没有得到的东西。

首先是我(哦,我来自 AS3 编码的角度)认为如果你想在你的类中有一个变量,你需要先在标题中使用 @property 运算符声明它,然后在 @synthesize .m 文件,并且您还必须在标头中声明该方法,但是我遇到过仅在 .m 文件的方法中定义变量的情况,而没有在任何地方声明,方法也是如此, 直接写入 .m 文件的方法,没有声明,它们工作正常。

那么@property/@synthesize 用于变量并在头文件中声明方法有什么意义呢?这与范围有关吗?

4

3 回答 3

3

您所说的不是变量的声明,而是通过getter和setter从类外部公开它。

@property/@synthesize 只是自动创建两种方法的快捷方式,它们是

  • - (void) [class setVariable:(type)var]
  • - (type) [class variable]

可以从其他类中设置和获取变量。

并非每个变量都需要从类外部设置或获取。

于 2012-08-05T13:27:50.420 回答
1

头文件 (.h) 应该包含您希望其他类了解该类的内容。类扩展——.m 文件中的接口部分——是私有声明的好地方。(如果一个方法在使用之前就被定义了,那么这就是一个声明。它不是最优的,但它可以工作。)

于 2012-08-05T13:30:34.793 回答
1

Objective-C 中的变量主要分为三类:

  • 实例变量
  • 静态范围变量(静态、全局和函数静态)
  • 自动范围变量(局部变量和函数/方法参数)

当您声明和合成一个属性时,会为您创建一个实例变量。另一方面,局部变量是在代码块的范围内声明的,不能通过属性声明。

于 2012-08-05T13:31:08.553 回答