我编写了一个带有插件系统的应用程序(带有 NSBundle),一切正常,但我想处理在应用程序执行期间删除插件文件的情况。
我认为最好的方法是禁止删除已加载的插件文件(例如Windows中的dll,它们在被应用程序加载时无法删除)
但在 OSX 中,即使插件文件被应用程序使用,也可以删除它。
是否可以在应用程序使用插件文件时禁止删除插件文件?
或者至少可以在删除文件时收到通知,以便我可以在删除插件文件时更新我的应用程序吗?
谢谢
最佳答案
我认为您无法禁用已加载插件的删除,但可以监视文件系统的更改,这可能会有所帮助。
“文件系统事件 API”
使用文件系统事件 API,如果指定目录的内容发生更改,您的应用程序可以收到通知。然后你必须自己扫描目录,例如检查哪些插件仍然存在或已被删除。
内核队列
这是一种更底层的方法,使用
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/