静态只分配一次?

时间:2014-03-30 07:27:40

标签: objective-c static

我有一个静态变量,并将此对象多次分配给

@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显示的结果与其他人相比不同 ......?

每次加载时,它都有不同的地址,其中上一个obj ,静态指针指向的不是它有不同的地址,这意味着前一个对象得到了 扭曲?

提前谢谢。

2 个答案:

答案 0 :(得分:2)

static修饰符无法正常工作。

当应用于像您一样在此处执行的全局变量时,static关键字只会使变量名称仅在当前文件中可见。 (这意味着另一个声明名为dirEntry的全局变量的文件将以一个单独的变量结束,而不是对此变量的另一个引用。)

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

static DirectoryEntry *entry = NULL;

...

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

答案 1 :(得分:1)

它会显示不同的结果,因为每次调用viewDidLoad时都会分配对象。

dirEntry是静态的这一事实并不是每次都在同一地址中分配分配。

重新分配新分配后,先前的地址将丢失(如果您使用ARC,那么它将被取消分配给您),除非您在新分配之前将其分配给另一个指针变量。