`
lizhuang
  • 浏览: 904361 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

“FOUNDATION_EXPORT” vs “extern”

 
阅读更多
If you look in NSObjCRuntime.h (in Foundation) you will see that FOUNDATION_EXPORT compiles to extern in C, extern "C" in C++, and other things in Win32. So, it's a bit more compatible. For most projects, this won't make any difference.

You should create a header file like

// Constants.h
FOUNDATION_EXPORT NSString *const MyFirstConstant;
FOUNDATION_EXPORT NSString *const MySecondConstant;
//etc.
(you can use extern instead of FOUNDATION_EXPORT if your code will not be used in mixed C/C++ environments or on other platforms)

You can include this file in each file that uses the constants or in the pre-compiled header for the project.

You define these constants in a .m file like

// Constants.m
NSString *const MyFirstConstant = @"FirstConstant";
NSString *const MySecondConstant = @"SecondConstant";
Constants.m should be added to your application/framework's target so that it is linked in to the final product.

The advantage of using string constants instead of #define'd constants is that you can test for equality using pointer comparison (stringInstance == MyFirstConstant) which is much faster than string comparison ([stringInstance isEqualToString:MyFirstConstant]) (and easier to read, IMO).
分享到:
评论

相关推荐

    iOS常见宏理解及使用方法

    `FOUNDATION_EXPORT`通常用于Foundation框架中的接口,而`UIKIT_EXTERN`则适用于UIKit框架。它们都类似于`extern`关键字,但提供了更好的兼容性。例如: ```objc // .m 文件 NSString *const ...

    VC MFC DLL 入门资料 VC MFC DLL 入门资料

    extern "C" DLL_EXPORT int AddNumbers(int a, int b) { return a + b; } ``` 10. **最佳实践** - 尽量保持DLL的功能单一,以便于维护和测试。 - 使用接口类来封装DLL的实现,使得客户端只依赖于接口,降低...

    VS2015中用C++创建MFC DLL动态库

    在Microsoft Visual Studio 2015 (VS2015) 中,开发人员可以使用C++语言创建MFC(Microsoft Foundation Classes)DLL(Dynamic Link Library)动态库。MFC是微软提供的一套C++类库,它封装了Windows API,使得开发者...

    VC+++MFC+DLL动态链接库编写详解.doc

    在VC++环境中,MFC(Microsoft Foundation Classes)是一种C++库,用于简化Windows应用程序的开发。动态链接库(DLL)是Windows操作系统中的一个重要组件,它允许代码和资源被多个独立的执行程序共享。本篇文章主要...

    关于dll函数[文].pdf

    5. `extern "C"`:为了跨语言兼容,使用`extern "C"`可以让C++编译器以C语言的方式处理函数,避免名称修饰,使得C++编写的函数可以在C代码中调用。 6. 模块定义文件(.DEF):.DEF文件是定义DLL属性的重要文本文件...

    如何在MFC扩展DLL中导出类

    extern "C" __declspec(dllexport) void MyFunction() { // 函数实现 } ``` 总结来说,MFC扩展DLL提供了在DLL中使用MFC类的能力,允许你共享复杂的对象和功能。通过正确导出类、处理资源和使用显式链接,你可以...

    c++ 动态链接库

    为避免这个问题,可以使用`__declspec(dllimport/export)`或使用`extern "C"`导出C++对象。 7. **线程安全与异步调用**:在多线程环境中使用DLL时,需要考虑线程安全问题。DLL中的全局变量和静态成员变量可能引发...

    VC++ MFC DLL动态链接库编写详解

    _declspec(dllexport) extern const COLORREF MyColor = RGB(0, 0, 0); _declspec(dllexport) CRect MyRect(10, 10, 20, 20); ``` 注意,如果希望在 DLL 中导出常量或其他非函数类型的实体,需要使用 `extern` ...

    vc++如何创建和调用动态库

    extern "C" __declspec(dllexport) int __stdcall Add_new(int a, int b); ``` 2. **使用模块定义(.def)文件声明**:需要在库工程中添加模块文件,格式如下: ```plaintext LIBRARY 库工程名称 EXPORTS 导出...

    VC++动态链接库编程之非MFCDLL.pdf

    extern "C" int __declspec(dllexport)add(int x, int y); #endif // lib.cpp #include "lib.h" int add(int x, int y) { return x + y; } ``` `__declspec(dllexport)`关键字用于指示编译器将`add`函数导出到DLL...

    dll的创建与使用 dll的创建与使用 dll的创建与使用

    创建DLL主要有两种方法:非MFC(Microsoft Foundation Classes)DLL和使用.def文件。 1. **非MFC DLL创建步骤**: - 打开Visual Studio,选择`File` -> `New` -> `Project`,然后选择`Win32 Dynamic-Link Library`...

    QT调用dll和MFC调用QT的dll

    QT库和MFC(Microsoft Foundation Classes)是两种不同的应用程序开发框架,它们分别由Qt公司和微软公司提供。在软件开发中,有时我们需要在QT环境中调用动态链接库(DLL),或者将QT编译成DLL供MFC应用使用。这篇...

    VS2017写C库以及wpf调用该C库Demo(源码)

    在本示例中,我们将探讨如何使用Visual Studio 2017创建一个C语言编写的动态链接库(DLL),然后在WPF(Windows Presentation Foundation)应用程序中调用这个C库。作者红模仿提供了完整的源码,这对于初学者或...

    MFC EXE 调用MFC DLL MFCStaticDll

    在Windows编程环境中,MFC(Microsoft Foundation Classes)是一种基于C++的类库,它为开发者提供了构建Windows应用程序的框架。本篇文章将详细讲解如何在MFC_EXE(一个使用MFC构建的可执行程序)中调用MFC_DLL(一...

    一步一步实现MFC扩展DLL中导出类和对话框

    这里,`EXTERN_C`用于处理C++的名称修饰问题,`DLLEXPORT`表示当前是在DLL中定义,如果在客户端应用中使用,应使用`DLLEXPORT`。 **步骤4:添加对话框资源** 为了在DLL中创建和显示对话框,我们需要先添加一个...

    (完整版)MFC下DLL编程(图解).doc

    extern "C" __declspec(dllexport) void __stdcall fun(); ``` 使用.def文件可以将函数导出到DLL中,使其可以被外部应用程序调用。例如: ``` LIBRARY MyDLL EXPORTS fun ``` 在MFC下DLL编程中,需要注意DLL的版本...

    vc++.net用mfc方式调用dll

    extern "C" __declspec(dllexport) void MyDllFunction(void); ``` 3. **链接DLL**:在VC++.NET的项目设置中,确保编译器知道DLL的位置,这样在运行时能够找到它。通常,这可以通过在项目的“配置属性”->“链接...

Global site tag (gtag.js) - Google Analytics