我发现必须调用NSApplicationLoad才能获得显示重配置回调。我的程序是用C语言编写的,出于各种原因,我想避免将Objective-C代码添加到我的项目中。
在其中NSApplicationLoad
定义的标头(Cocoa/Cocoa.h
或AppKit/AppKit.h
)是Objective-C标头,并且在使用常规C编译器进行编译时自然会引发很多错误。
NSApplicationLoad
用一个简单的extern void NSApplicationLoad(void)
原型进行调用就可以了,实际上我的程序可以正常工作。但是,我有点担心这不是一种“正确”的方法,因为感觉我应该包括一些东西。
是否有包含NSApplicationLoad的直接C头(例如CoreFoundation或ApplicationServices头)?如果不是,我目前的方法(仅应用原型)是否安全?
您可以包装NSApplicationLoad
C函数,然后在c代码中调用包装函数。
包装器
BOOL MyNSApplicationLoad(void);
Wrapper.m(需要是ObjC文件才能包含ObjC标头)
#include <Cocoa/Cocoa.h>
BOOL MyNSApplicationLoad(void) {
return NSApplicationLoad();
}
一些
#include "Wrapper.h"
void foo() {
MyNSApplicationLoad();
}
因此,即使NSApplicationLoad
在将来的SDK版本中更改的签名,您也会得到注意,并且只需要修改包装函数即可。
但是,NSApplicationLoad
由于它是有文档的公共API ,因此极不可能进行更改。只需BOOL NSApplicationLoad(void)
在您的头文件之一中声明就足够安全了。
您可能会注意到,事实BOOL NSApplicationLoad (void)
并非如此void NSApplicationLoad(void)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句