我有一个静态变量,并将此对象多次分配给
。@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 ,静态指针指向的不是它有不同的地址,这意味着前一个对象得到了 扭曲?
提前谢谢。
答案 0 :(得分:2)
static
修饰符无法正常工作。
当应用于像您一样在此处执行的全局变量时,static
关键字只会使变量名称仅在当前文件中可见。 (这意味着另一个声明名为dirEntry
的全局变量的文件将以一个单独的变量结束,而不是对此变量的另一个引用。)
如果您只想初始化此变量一次,您需要明确要求它:
static DirectoryEntry *entry = NULL;
...
if (entry == NULL) {
entry = [[DirectoryEntry alloc] init];
}
答案 1 :(得分:1)
它会显示不同的结果,因为每次调用viewDidLoad
时都会分配新对象。
dirEntry
是静态的这一事实并不是每次都在同一地址中分配分配。
重新分配新分配后,先前的地址将丢失(如果您使用ARC,那么它将被取消分配给您),除非您在新分配之前将其分配给另一个指针变量。