c++ - 代表被摧毁
问题描述
我正在构建一个跨平台应用程序,其中一个平台是 Macos。
现在我的代码的核心是用 C++ 和 Obj-C++ 编写的。
我创建一个这样的窗口:
NSWindow* window = [[NSWindow alloc] initWithContentRect:NSMakeRect(x, y, width, height) styleMask:macosWindowStyle backing:NSBackingStoreBuffered defer:false];
但我想听窗户。我本可以对它进行子类化,但我选择不这样做。
从 中获取事件的另一种方法NSWindow
是设置委托。
现在,由于我的代码在 Obj-C++ 中,我不能让 C++ 类继承自 Obj-C 协议。
所以,我创建了一个 Obj-C 标头,它实现了NSWindowDelegate
.
这里是:
@interface SomeClass : NSObject<NSWindowDelegate>
@end
我这样覆盖windowShouldClose
:
- (BOOL)windowShouldClose:(NSWindow *)sender {
NSLog(@"Hello!");
return true;
}
在我的 Obj-C++ 文件中,我这样做了:
NSWindow* window = [[NSWindow alloc] initWithContentRect:NSMakeRect(x, y, width, height) styleMask:macosWindowStyle backing:NSBackingStoreBuffered defer:false];
SomeClass* someClass = [[SomeClass alloc] init];
[window setDelegate:someClass];
但是,当我按下 X 按钮时,什么也没发生。
然后我继续在 Swift 中测试同样的东西,同样的结果。
然后我意识到委托被破坏了,因为它是一个弱引用。
我的问题是,我该如何解决这个问题?
解决方案
好的,我想通了。出于某种原因,我认为我的 Obj-C++ 代码中不能有 Obj-C 类指针。我认为这是限制之一。
推荐阅读
- hyperledger-fabric - 如何保护超级账本结构状态数据库?
- python - 矢量化循环操作
- javascript - 如何在Angular Typescript中将日期分配为LocalDate
- shell - 将 hdfs 上的脚本文件传递给 impala-shell
- apache-zookeeper - Apache Nifi secured cluster: Unable to locate node CN=
, OU=NIFI to seed policies - jquery - Issue with data when created by loop
- postgresql - Get Average for a Date Range Relative to Each Row Using Postgres Window Functions
- javascript - 下拉时如何更改折叠的导航栏的背景颜色?
- scheme - 在 Racket 中使用自身内部的语法宏
- ibm-cloud-infrastructure - How does the NEW invoice in softlayer get charged to customer?