我有一个名为 Region 的服装类,我正在使用这段代码来初始化 region 变量,这怎么可能在这段代码的末尾 myAppDelegate.provisoryRegion 不是 nil 而 region 是 nil??? myAppDelegate.provisoryRegion 不是通过引用区域传递的吗??? 我 100% 确定这段代码末尾的区域为 nil。
Region *region=myAppDelegate.provisoryRegion;
if (!myAppDelegate.provisoryRegion) {
myAppDelegate.provisoryRegion=[[Region alloc]init];
}
if (!region){ NSLog(@"region is nil");
}
最佳答案
是的。它必须是零。 因为你换了对象!
当执行 myAppDelegate.provisoryRegion=[[Region alloc]init];
myAppDelegate.provisoryRegion 指向一个新对象(堆上的一个新地址)。
*region
将不跟随到新地址!
所以*region
仍然指向NULL
地址。
但为什么要在第 1 行复制指针?
为什么不总是使用 myAppDelegate.provisoryRegion
。 *region
是 myAppDelegate.provisoryRegion
只需在示例虚拟代码的末尾执行并删除第 1 行:
if (!myAppDelegate.provisoryRegion){ NSLog(@"region is nil");
}
还有……
myAppDelegate.provisoryRegion=[[Region alloc]init];
看起来像是内存泄漏(如果您的@property 设置为保留)。
修复:
myAppDelegate.provisoryRegion=[[[Region alloc] init] autorelease];
关于iphone - 指针和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071963/