我试图更好地理解强引用,但在我将在下面列出的特定示例的上下文中。
假设我有一个名为 gPrefs 的全局变量。它是 Preference Class 类型,是我制作的自定义类。
我在其界面中声明了以下内容......
@property (strong) NSURL *masterFolder;
这是一个指向 NSURL 对象的指针。我已经给了它(强)参考,这意味着它会一直存在而不释放它的内存。
现在假设我在其他地方完全有一个实例函数,如下所示。
- (IBAction)masterDataSelectButtonAction:(id)sender
{
NSOpenPanel *openPanel = [NSOpenPanel openPanel];//creates an open panel.
[openPanel setCanChooseDirectories:YES];
[openPanel setCanChooseFiles:NO];
NSInteger panelResult = [openPanel runModal];
if(panelResult == NSFileHandlingPanelCancelButton){
NSLog(@"masterDataSelectButtonAction -> Cancel Button Pressed");
return;
}
if(panelResult == NSFileHandlingPanelOKButton){
NSLog(@"masterDataSelectButtonAction-> Ok Button Pressed");
NSURL *theUrl = [openPanel URL];
gPrefs.masterFolder = theUrl; //Setting (strong ref) point to local.
[_masterDataLabel setStringValue:[gPrefs.masterFolder absoluteString]];
}
}
如果用户按下面板的 OK 按钮,我将创建一个名为 theUrl 的本地指针实例变量。然后我将全局变量 masterFolder 指针设置为局部实例变量指针。
如果我理解正确,ARC 应该在它认为不再使用时在函数结束时释放对象。
因此,应该在函数结束时释放 URL。
但是,如果我理解(强)引用,编译器可能足够聪明地意识到,由于我将全局首选项指针更改为不同的指针,它将使内存中的其他指针引用保持活动状态(或保留它)。
如果我没有将我的 masterFolder 指针声明为 (strong),那么在函数结束后 masterFolder 指针是否会为零?
我的实验表明,尽管到达本地实例函数的末尾,但保持它(强)似乎保留了 localInstance 指针的值。
我的问题是为什么?即使masterFolder是一个强引用,如果我将它分配给一个localInstance指针并且该指针在Instance函数的末尾被删除,为什么当我在其他任何地方的实例函数之外再次读取masterFolder的值时没有NIL出来.
我对(强)引用的理解有点(弱)。没有双关语的意思。