0

好的,情况有点复杂,但对于比我更熟悉 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错误。

我究竟做错了什么?有任何想法吗?

4

1 回答 1

2

将属性声明为,如果您希望它在对象死亡时weak自动设置为,或者声明为,如果您想让对象保持活动状态(可能是您想要的)。nilstrongstrong

unsafe_unretained如果对象被释放,将导致一个悬空指针(这就是为什么它被称为“不安全”..)

于 2013-03-04T10:36:10.617 回答