Objective C 属性变量和非属性变量的存储

Storage of Objective C property variables and non property variables

任何人都可以向我解释一下 objective c 中存储的变量的确切位置吗?

在.h文件中

@interface example: NSObject
{
  NString *string;      // where is this stored
  int     number;       // where is this stored
}
@property (nonatomic,strong) NSURL* mURL;  // where is this stored

@end

同样,

在 .m 文件中

# import "xyz.h"

NSString *constant = @"hello";  // where is this stored

@interface example()
{
  NString *textg;      // where is this stored
  int     numb;       // where is this stored
}
@property (nonatomic,strong) NSURL* sURL;  // where is this stored

@end

"string"、"textg"、"number" 和 "numb" 是 class 的实例变量。不同之处在于 "string" 和 "number" 有资格公开访问(通过 ref->number),而 "textg" 和 "numb" 是私有的(因为其他 classes 通常不会#import .m 文件)。

"mURL" 和 "sURL" 属性存储为实例变量“_mURL”和“_sURL”。同样,“_mURL”有资格公开访问(通过 ref->_mURL),而“_sURL”不是出于同样的原因。

并且,"constant"是一个普通的全局变量,存储在堆上。

你问:

where exactly the variables stored

要回答这个问题:constant 以外的所有变量以及属性使用的变量都存储为 class [=12] 的每个实例的内存分配的一部分=] 你创造的。每个实例都有自己的每个变量副本。例如。当你这样做时:

example *anExample = [example new];

您正在请求创建 example 的实例,并将对它的引用存储在 anExample 中。该实例包含您声明的所有实例变量和属性(并且它还包含其超classes 的任何实例变量和属性,在此仅NSObject)。

您的另一个变量 constant 是在文件级别声明的。这些变量作为应用程序的一部分与编译后的代码一起存储在文件中。无论创建多少个 class 实例,都只有一个 constant 变量。方法 运行 代表任何实例都看到相同的 constant 变量。

HTH