在Mac上使用单实例应用程序的理想方式

psy*_*tik 7 macos cocoa mutex

在Windows上,通常的做法是创建一个命名的互斥锁,并使用它来确定给定应用程序的实例是否已在运行.这有其缺点,但大多数都有效.

我可以想一想在Mac上做到这一点的方法:

  1. 命名为pthread互斥体
  2. 枚举正在运行的进程并查找匹配的进程
  3. 创建并锁定文件

Cocoa/Carbon内置的东西比上面的选项更容易吗?如果没有,那三个中哪一个最常用于mac?我假设2或3 ......

Jon*_*etz 8

详细说明使用NSWorkspace.尝试在NSWorkspace中使用launchApplications.这将返回一个NSArray,其中包含每个已启动应用程序的字典.您可以遍历数组以查看您要查找的应用程序是否已在运行.我会建议您使用的关键NSApplicationBundleIdentifier值具有像"com.mycompany.myapp"而不是找名称的值.如果您需要查找应用程序的软件包标识符,可以查看应用程序包中的info.plist文件.


Cro*_*ent 6

Mac没有与Windows一样的实例.一般来说,您希望应用程序运行两次,您需要复制二进制文件,然后双击复制的版本.

如果您需要运行两个应用程序实例,那么您不会像Mac用户那样思考:).

编辑:这在技术上并非如此.检查评论.

  • 这不是真的.例如,如果从终端启动应用程序,则可以同时启动_N_实例.这是_uncommon_的事实并不意味着不应该考虑这个案子. (17认同)
  • 换句话说,我们没有必要谈论GUI应用程序.它已经这样运作了. (5认同)