NSWindowController中的EXC_BAD_ACCESS

时间:2013-03-04 10:26:32

标签: objective-c cocoa automatic-ref-counting nswindowcontroller

好的,情况有点复杂,但问题的本质对于任何比我熟悉Cocoa内存管理的人来说都应该非常简单。

一些细节: - 从我的主应用程序,我正在加载一个“可加载”的包(由NSWindowController组成) - 两个项目(主应用程序和“插件”)都启用了ARC

在我的插件代码中,我有一个自定义初始化方法:

- (id)initWithAPI:(id)api
{
    pluginWindowController* newPluginWindowController = [super initWithWindowNibName:@"PluginWindow"];

    if (newPluginWindowController)
    {
        [newPluginWindowController setAPI:api];
    }

    return newPluginWindowController;

}

这是API的声明方式:

@property (unsafe_unretained) id API;

现在,抓住这个问题:

  • 我正在使用initWithAPI:进行初始化,并且正在设置API
  • 当我在API中测试- (void)windowDidLoad:的值时,它仍显示正常。
  • 但是:当尝试从另一个方法中执行相同的操作时(实际上是我的插件窗口中的按钮单击触发的IBAction)...尝试获取[self API]会触发EXC_BAD_ACCESS错误

我做错了什么?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果要在对象死亡时将其自动设置为weak,则将属性声明为nil,或者如果要保持对象处于活动状态,则将其声明为strong strong可能就是你想要的。)

如果对象被解除分配,

unsafe_unretained将导致悬空指针(这就是为什么它被称为“不安全”......)