我正在使用 SIMBL 调配第三方应用程序创建 NSMenuItems 的方法,但是在初始化我的方法调配之前创建菜单项的时间有 50/50。
什么是确保我的调酒总是第一位的干净方法?我想我可以调配 applicationDidFinishLaunching: 并继续我的调配。但我担心我会在那里遇到同样的错误,在我的实际调酒到位之前将调用 applicationDidFinishLaunching。
约翰
我正在使用 SIMBL 调配第三方应用程序创建 NSMenuItems 的方法,但是在初始化我的方法调配之前创建菜单项的时间有 50/50。
什么是确保我的调酒总是第一位的干净方法?我想我可以调配 applicationDidFinishLaunching: 并继续我的调配。但我担心我会在那里遇到同样的错误,在我的实际调酒到位之前将调用 applicationDidFinishLaunching。
约翰
您可以使用如下构造函数:
__attribute__((constructor)) static void do_the_swizzles()
{
// Do all your swizzling here.
}
来自GCC 文档:
该
constructor
属性使函数在执行进入之前被自动调用main()
。
注意:虽然这最初来自GCC
,但它也适用于LLVM
.
您希望在加载库后立即进行调酒。您可以通过 、 或构造函数来做到这+initialize
一点+load
。
@bbum对这个问题的回答有更多信息,以及他的一篇关于使用这些特殊类方法的注意事项的博客文章。
(而且我故意不质疑你所做的事情的智慧;))