好的,情况有点复杂,但问题的本质对于任何比我熟悉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:
的值时,它仍显示正常。[self API]
会触发EXC_BAD_ACCESS
错误我做错了什么?有什么想法吗?
答案 0 :(得分:2)
如果要在对象死亡时将其自动设置为weak
,则将属性声明为nil
,或者如果要保持对象处于活动状态,则将其声明为strong
strong
可能就是你想要的。)
unsafe_unretained
将导致悬空指针(这就是为什么它被称为“不安全”......)