gpt4 book ai didi

objective-c - NSWindowController 中的 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-12-03 17:40:57 27 4
gpt4 key购买 nike

好吧,情况有点复杂,但问题本身的本质对于比我更熟悉 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
  • 当我在 - (void)windowDidLoad: 中测试 API 的值时,它仍然显示得很好。
  • 但是:当尝试在另一个方法中执行相同的操作时(实际上是由我的插件窗口中的按钮单击触发的 IBAction)...尝试获取 [self API] 会触发EXC_BAD_ACCESS 错误。

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

最佳答案

如果您希望在对象死亡时将属性自动设置为 nil,请将属性声明为 weak,或者声明为 strong,如果你想让对象保持事件状态(strong 可能就是你想要的)。

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

关于objective-c - NSWindowController 中的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15199355/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com