ios – 在Cocoa中存在什么定义__LP64__和__arm64__,在编译时区分平台?他们在哪里或如何定义?

随着arm64作为 iphoneos平台的标准体系结构,在某些情况下,需要为64/32架构的特定代码实现编译时条件.

如果您查看CoreGraphics / CGBase.h以及一些流行的开源项目是否为providing support for arm64,那么您可以通过以下方式检查64位运行库的存在:

#if defined(__LP64__) && __LP64__
...
#else
...
#endif

也可以专门检查arm64(而不是只是64位运行时),如this fix for erikdoe/ocmock所述

#ifdef __arm64__
...
#else
....
#endif

有没有一个完整的列表,或这些类型的定义的文档?他们在哪里或如何定义?

解决方法

这些宏并不特定于Cocoa,它们特定于CLANG,它们可以在命令行中列出:

clang -dM -E -x c / dev / null

不同的CLANG版本附带不同数量功能标志,可以在配置时打开或关闭,或者取决于编译器正在运行的平台和操作系统.在testing headers中可以找到一个相当全面的列表,每个支持的系统的变体也分散在测试目录中.每个文档取决于该标志是否特定于CLANG,或者在其链接一个标准库中定义(例如__llvm__是defined by CLANG,但__WCHAR_WIDTH__由LibC定义).因为这个原因,确实没有完整的列表.只要遵守语言规范,不同的平台就可以略有不同.

大多数有趣的公共Objective-C宏存在于Foundation / NSObjCRuntime.h底部附近.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...