objective-c - 如何禁用(或收到通知)删除已加载的插件(NSBundle)文件?

标签 objective-c macos cocoa plugins nsbundle

我编写了一个带有插件系统的应用程序(带有 NSBundle),一切正常,但我想处理在应用程序执行期间删除插件文件的情况。

我认为最好的方法是禁止删除已加载的插件文件(例如Windows中的dll,它们在被应用程序加载时无法删除)

但在 OSX 中,即使插件文件被应用程序使用,也可以删除它。

是否可以在应用程序使用插件文件时禁止删除插件文件?

或者至少可以在删除文件时收到通知,以便我可以在删除插件文件时更新我的​​应用程序吗?

谢谢

最佳答案

我认为您无法禁用已加载插件的删除,但可以监视文件系统的更改,这可能会有所帮助。

  1. “文件系统事件 API”

    使用文件系统事件 API,如果指定目录的内容发生更改,您的应用程序可以收到通知。然后你必须自己扫描目录,例如检查哪些插件仍然存在或已被删除。

  2. 内核队列

    这是一种更底层的方法,使用kqueue()kevent()系统调用。例如,您可以注册一个文件描述符,如果在引用的文件上调用 unlink(),您将会收到通知。

这两种机制均在 File System Events Programming Guide 中进行了描述。 。还有一个示例项目Monitoring File Changes with the File System Events API .

关于objective-c - 如何禁用(或收到通知)删除已加载的插件(NSBundle)文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693446/

相关文章:

ios - UITileLayer 显示忽略伪造的图层大小

java - 在mac上通过java运行redis时权限被拒绝

xcode - 连续检查两个 NSSecureTextField

objective-c - 为什么我的 Cocoa 选择器实际上没有被调用?

objective-c - 复制 View

objective-c - 在非 ARC 代码中从 NSKeyedArchiver 中提取数据

iOS:通过电子邮件的 Firebase 邀请不起作用

java - Hadoop MAC OS 安装问题

objective-c - NSNumber 保存 double

ios - 来自 Apple : photos, 服务器等的权限