【问题标题】:is static allocated only once?静态只分配一次吗?
【发布时间】:2014-05-09 14:27:09
【问题描述】:

我有一个静态变量,并像这样多次将一些对象分配给这个..

@interface DetailViewController ()



@end
// static varable for Entry
static DirectoryEntry *dirEntry;

@implementation DetailViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.


  // init entry
   dirEntry = [[DirectoryEntry alloc]init];

    NSLog(@"%@ ",dirEntry);


}

我的问题是,为什么 NSLog 显示的结果与彼此不同...?

每次加载时,它都有不同的地址,那么静态指针指向的previous obj在哪里,它具有不同的地址,这意味着前一个对象得到 扭曲?

提前谢谢你。

【问题讨论】:

标签: objective-c static


【解决方案1】:

static 修饰符不能这样工作。

当像您在这里所做的那样应用于全局变量时,static 关键字只会导致变量名称仅在当前文件中可见。 (这意味着另一个文件声明了一个名为 dirEntry 的全局变量,最终会得到一个单独的变量,而不是对这个变量的另一个引用。)

如果您只想初始化此变量一次,则需要明确要求:

static DirectoryEntry *entry = NULL;

...

    if (entry == NULL) {
        entry = [[DirectoryEntry alloc] init];
    }

【讨论】:

    【解决方案2】:

    由于每次调用viewDidLoad 时都分配了一个new 对象,它会显示不同的结果。

    dirEntry 是静态的这一事实不会使分配每次都分配到相同的地址。

    一旦你重新分配了一个新的分配,以前的地址就会丢失(如果你使用 ARC,那么它将为你解除分配),除非你在新分配之前将它分配给另一个指针变量。

    【讨论】:

      猜你喜欢
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多