2

在 MATLAB 的 App Designer 中,我发现的唯一可编辑的“析构函数”是UIFigureCloseRequest回调。但是,这似乎并不是在 App Designer 应用程序可以关闭的所有情况下都被调用。例如,将 atimer作为属性添加到应用程序类。如果此计时器delete在回调中为 d CloseRequest,则只要通过关闭其主窗口来关闭应用程序,一切都可以。

但是,如果应用程序实例以其他方式被破坏——例如通过点击编辑器中的“运行”按钮——将留下一个杂散计时器(可以通过 找到timerfindall)。这当然会产生意想不到的后果。

由于 App Designer 的应用程序的析构函数在编辑器中显示为灰色,我该如何添加以确保所有资源都被可靠地销毁?

4

1 回答 1

1

似乎没有记录在案的解决方案可以满足您的要求。

以下解决方案是“hack”,涉及编辑 MATLAB 系统文件。
我不确定这是一个可行的解决方案,您可以将其视为概念证明......

  1. 找到文件appdesigner.js
    在我的(Windows)机器文件位置是:(c:\Program Files\MATLAB\R2019a\toolbox\matlab\appdesigner\web\release\appdesigner\
    该文件看起来像一个自动生成的代码)。
  2. 做一个备份
  3. 使用文本编辑器打开文件(我使用的是 Notepad++)。
    找到文本f.createCodeLine("delete(app."
  4. 将上述文本(代码)替换为:f.createCodeLine("if ismethod(app, 'my_delete'), my_delete(app);end;delete(app."
    保存修改后的文件。
  5. 执行 App Designer(您可能需要重新启动 MATLAB)。
    在代码视图中,您会注意到灰色部分的变化:
    if ismethod(app, 'my_delete'), my_delete(app);end;delete(app.UIFigure)
  6. 添加一个名为my_delete.
    将您的清理代码放在my_delete方法中。

我在 MATLAB R2019a 中测试了该解决方案。

于 2019-10-06T21:05:41.683 回答