NSUndoManager 动作名称中的符号有什么特别之处?

What's special about an ampersand in an NSUndoManager action name?

我注意到如果我说类似的话

[self.undoManager setActionName: @"X & Y"];

然后生成的菜单项看起来像 "Undo X Y"(在 X 和 Y 之间有两个 space)。 (在 Mac OS X 10.7.5 和 10.10.3 上测试过。)我可以通过加倍显示 & 符号,但我想知道为什么会这样?它有记录吗?在操作名称或菜单项中是否有一些专门解释的更广泛的字符集?

在 NeXT 时代,菜单项可能有一个 "mnemonic",这是一个在菜单中带有下划线的字符。如果用户在菜单具有焦点时键入该字符,则该项目将被 selected。

在代码中,助记符是在菜单标题字符串中通过在字符前加上一个符号来表示的。 NSMenuItem 上仍有已弃用的方法来设置和获取助记词。

OS X 不支持该功能。它不会显示带下划线的字符,也不会让您通过键入 select 菜单项。因此,这些方法只是从标题中删除了符号。

显然,NSUndoManager 必须仍在使用其中一个 mnemonic-based API 来设置菜单项标题。这大概是为了向后兼容。某些应用程序可能会在撤消操作名称中使用和号,目的是将它们转换为助记符。如果 NSUndoManager 停止剥离它们(通过切换到 NSMenuItem 的更常见的 non-mnemonic 方法),那么这些应用程序可能会开始在奇怪的地方显示符号。