Availability.h 类宏

2024-02-21

是否可以有一个自定义可用性宏,例如 __OSX_AVAILABLE_STARTING 。我需要它以同样的方式执行,我只需要更改它的名称以及参数的版本和数量?


是的,当然了。 Objective-C 是 C 的严格超集,因此 C 宏非常适合您使用,并且该工具只是一组最终扩展为的 C 宏gcc's __attribute__关键字声明函数的特殊属性 http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html.

相关声明均在

  • Availability.h http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/Availability.h
  • AvailabilityInternal.h http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/AvailabilityInternal.h

要刷新,您可以使用__OSX_AVAILABLE_STARTING将函数声明标记为特定版本支持的宏,如下所示:

extern void mymacfunc() __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_NA);

那么我们自己需要什么来实现呢?如果你剥掉他们的 支持两种不同的操作系统(mac、iphone),可用性设施归结为:

  1. 带有版本参数的宏,例如__MY_AVAILABLE_STARTING(<version>):

    #define __MY_AVAILABLE_STARTING(_myversion) __MY_AVAILABILITY_INTERNAL##_myversion
    
  2. 版本参数集,如Availability.h,这是上述内容的有效论据:

    #define __MYVER_2_0     20000  
    #define __MYVER_2_1     20100  
    #define __MYVER_2_2     20200  
    #define __MYVER_3_0     30000  
    
  3. 另一组宏,就像这样AvailabilityInternal.h它指定每个版本应该发生什么(常规支持、已弃用、不可用、弱等)。再次强调,这是编译器的函数,请参见gcc docs http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html(还有很多其他有趣的选项):

    #define __MY_AVAILABILITY_INTERNAL__MYVER_2_0 __AVAILABILITY_INTERNAL_UNAVAILABLE
    #define __MY_AVAILABILITY_INTERNAL__MYVER_2_1 __AVAILABILITY_INTERNAL_WEAK_IMPORT
    #define __MY_AVAILABILITY_INTERNAL__MYVER_2_1 __AVAILABILITY_INTERNAL_REGULAR
    
  4. 最后,责任结束了,宏扩展到__attribute__设施。

    对于我上面的,你可以继续使用苹果的宏:

    #define __AVAILABILITY_INTERNAL_DEPRECATED         __attribute__((deprecated,visibility("default")))
    #define __AVAILABILITY_INTERNAL_UNAVAILABLE        __attribute__((unavailable,visibility("default")))
    #define __AVAILABILITY_INTERNAL_WEAK_IMPORT        __attribute__((weak_import,visibility("default")))
    #define __AVAILABILITY_INTERNAL_REGULAR            __attribute__((visibility("default")))
    

    或者,当然,你可以定义你自己的疯狂。

C 宏是强大的东西,但经常被忽视。祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Availability.h 类宏 的相关文章

  • SwiftUI - 预览时未知的预览提供程序“ContentView_Previews_”。发生在一个全新的项目中

    我有这个简单的观点 import SwiftUI struct ContentView View var body some View Text Hello struct ContentView Previews PreviewProvid
  • 为什么没有收到(UDP 多播)数据包?

    所以 我一直试图弄清楚为什么这不起作用 但我没有任何线索 我已经成功地从 iPhone 发送数据包并在 Mac 上接收它们 根据 tcpdump 我的 mac 正确发送数据包 此外 如果我在模拟器中运行它 它工作得很好 这让我相信这是一个网
  • 如何从日期中获取小时、分钟和上午/下午? [复制]

    这个问题在这里已经有答案了 我尝试从日期中提取小时 分钟和上午 下午 但我得到 NULL 输出 我在下面显示了我的代码 请查看 NSString dateStr 29 07 2013 02 00am NSDateFormatter form
  • 使用 UIKeyCommand 检测删除键

    任何人都知道如何使用检测 删除 键UIKeyCommand在 iOS 7 上 当人们在使用 Swift 时遇到问题时 我认为用 Objective C 和 Swift 编写一个小型的 完整的例子可能是一个很好的答案 请注意 Swift 没有
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • 核心数据:为什么必须调用重新加载数据才能使我的应用程序运行?

    我花了整个晚上调试一个简单的应用程序 该应用程序从网络检索一张图像 是的 是的 旨在让我的生活更轻松 并将其显示在表格视图中 我这样做是为了练习学习核心数据 在我修复它之前 错误消息显示如下 2012 09 30 06 16 12 854
  • 如何将 UIImageView 裁剪为自定义形状

    用户是否可以在该位周围画一条虚线 圆圈 UIImageView他们希望裁剪到 然后为UIImageView调整大小到这些点 这有点像 Photoshop 中的套索 选取框效果 更新 从 iOS 8 x 开始 UIImageView 提供了m
  • ShareKit + Facebook 身份验证不起作用

    我正在使用 ShareKit 从我正在开发的 PhoneGap 应用程序发布到 Facebook 我在 Facebook 中创建了该应用程序 并在我的项目中安装了该插件 Twitter 工作正常 但当我尝试在 Facebook 上分享时出现
  • UICollectionReusableView 方法未被调用

    我希望我的部分位于UICollectionView有一个带有图像的标题 我已按照以下步骤操作 在故事板中 分配了一个标题作为我的附件UICollectionView 给它一个标识符 创建了一个子类UICollectionReusableVi
  • iOS NSURLSession,如何在didCompleteWithError中重试

    我想在我的服务器上尝试一次调用 直到成功为止 我想每 30 秒尝试一次 所以我使用 NSURLSession 进行通话 NSURLSessionDownloadTask task self session downloadTaskWithR
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 如何以编程方式使用资产目录图像的切片信息?

    我的项目中曾经有一个图像 我会像这样加载它 UIImage image UIImage imageNamed image name resizableImageWithCapInsets UIEdgeInsetsMake 10 0f 10
  • 由于 2.23 导致 iOS 应用程序被拒绝 - iOS 数据存储指南

    以下是 Apple 关于拒绝的消息 2 23 应用程序必须遵循 iOS 数据存储指南 否则将被拒绝 2 23 详情 在启动和内容下载时 您的应用程序会存储 6 5 MB 这并不意味着 遵守 iOS 数据存储指南 下一步 请验证只有用户使用您
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • 将应用程序登录凭据发送给 AppStore 审核者

    我刚刚将我的应用程序上传到应用程序商店 该应用程序需要用户名 密码才能登录 但在上传过程中从未提示我输入任何凭据 有谁知道我如何向审阅者发送我的凭据 而不必等待他们审阅并请求凭据 您编辑应用程序元数据 标题 描述 关键字等 的页面最底部字段
  • 使用 nib 作为带有 nib 类的表节标题

    我想创建一个加载 nib 文件并将其设置为标题 UIView 的节标题 这个 nib 文件还将有一个关联的类 其中插座和操作连接到 因此我想像平常一样使用 nib 加载该类 我在网上搜索并找到了几个类似的答案 但我找不到任何适合我的答案 经
  • AVPlayer 不播放音频 - iOS 9,目标 - C

    我正在尝试从我的应用程序中的 URL 播放音频 iOS 8 中一切都按预期发生 模拟器和物理设备 对于 iOS 9 它可以在模拟器中运行 但在设备上 音频根本无法播放 出现流媒体 如果我单击播放 进度条还显示音频正在加载并播放 但没有声音
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 背景大小:封面在视网膜显示屏上看起来像素化

    可以看到我正在开发的网站here http ourcityourstory com dev 如果你查看 iPad 3 或 iPhone 4 上的 关于 或 联系 部分 背景看起来全都是疯狂的像素化 我有background size set

随机推荐

  • Postgres - 关于值是否包含特定字符串的 WHERE 子句

    如果我想检索所有条目 以便该列foo值包含一个字符串 bar 有没有一种简单的方法可以在 SQL 或 Postgresql 中执行此操作 就像是 WHERE foo bar 但不是 会是这样的 WHERE foo CONTAINS bar
  • HttpContent.ReadAsAsync 在哪里?

    我在网上看到了大量使用新方法的例子HttpClient应该有的对象 作为新 Web API 的一部分 HttpContent ReadAsAsync
  • 如何检测内存泄漏

    我遇到了一些与 android 中的 MemoryOutOfBounds 异常相关的问题 我发现这背后有两个原因 1 创建的线程处于活动状态并且没有在任何地方被销毁 2 内存泄漏 我们可以在eclipse中检测线程信息 但是 当我执行应用程
  • Rails 控制器中的“env”和“request.env”有什么区别?

    我在用着rspec为我的应用程序编写测试 为了授权我发送token在标题中 request headers token 000000099 get index 在控制器端我可以通过以下方式读取这个值request env HTTP TOKE
  • 绘制带圆角的 LinearLayout

    我正在尝试实现一个用圆角绘制自身的 LinearLayout 子类 根据我的研究 我设定setWillNotDraw false 并被覆盖onDraw 在画布上绘制圆角矩形 Override protected void onDraw Ca
  • 为什么用let描述的变量可以在函数内部访问?

    在下面的代码片段中 i是在函数f之后声明的 那么函数f如何访问i的值呢 let f if true f gt console log i let i 1 f i 在函数 f 之后声明 嗯 是的 但在相同的范围 块 内 i被声明在同一个blo
  • Mysql 错误 1241 (21000): 操作数应包含 1 列

    我有具有编号范围的客户组 从客户编号到客户编号 select g id select count sum sales FROM transactions t1 where t1 customernumber between g from c
  • 'c' 参数看起来像单个数字 RGB 或 RGBA 序列

    我的 jupyter 笔记本中出现以下错误 我已经将 matplotlib 更新到最新版本 但仍然出现错误 c 参数看起来像单个数字 RGB 或 RGBA 序列 其中 应避免 因为值映射将优先 长度与 x 和 y 匹配 请使用带有单个 如果
  • 如何在 Pubnub 中重新连接?

    我正在使用 PubNub 在我的 Js 代码中传输通知 一旦互联网断开并恢复 我无法弄清楚如何在 PubNub 中重新连接 恢复 在我的初始化和执行中为真 this listeners message msgEvent gt console
  • 由于 OSError 无法安装软件包:[WinError 2] 没有这样的文件或目录

    我尝试使用 pip 安装 numpy 但收到以下错误消息 Python 由于 OSError 无法安装软件包 Errno 2 没有这样的文件或目录 c python39 Scripts f2py exe gt c python39 Scri
  • 将 css 中生成的圆圈并排放置,而不使用 markdown 文件中的表格

    我正在使用 css 画一些圆圈 我是这样做的 circle background f00 width 200px height 200px border radius 50 这是我在 Markdown 文件中使用它的方法
  • 来源:“函数应用程序的优先级高于中缀运算符”[Haskell]

    我正在学习 Haskell 中的运算符优先级 网络上的几个地方都提到函数应用程序有higher优先于运算符 但我找不到明确的来源 这是来自的一个这样的提及Haskell 简要介绍 https www haskell org tutorial
  • 当我在列表中使用复选框时,未调用 ListItem onClick 方法

    大家好 我是 android 新手 我想显示复选框的动态列表 并且在单击多个复选框时我希望将它们的数据放在单个字符串中 但我的问题是我无法调用 onListItemClick 方法 如果我在列表中使用复选框 然而 根据我的理解和经验 在列表
  • LUIS 与特殊字符相关的问题

    TEXT 被转换为 TEXT 在 LUIS 中 当我们识别实体名称时 特殊字符的问题 请参考下图 这里是每月的智商仪表板hospitalists被转换为reportname gt monthly iq dashboard hospitali
  • 测试重定向 CakePHP 2.0

    我一直在看食谱上的一些例子 但我不明白 http book cakephp org 2 0 en development testing html a more complex example http book cakephp org 2
  • flutter-desktop-embedding 如何构建 exe 文件

    in 颤动桌面嵌入 https github com google flutter desktop embedding 我是windows环境 可以运行 但是不知道如何构建exe文件 我想知道该怎么办 If you flutter buil
  • 对 JSONP 请求的工作原理感到困惑

    我无法理解 jsonp 请求如何工作的细节 我已经阅读了包括 jsonp 上的 wiki 在内的多个资料来源 但对于在进行 jsonp 调用时回调实际上如何获取从服务器返回的函数仍然非常困惑 例如 在wiki中 请求的来源设置为 src h
  • 在不使用 GIT 的情况下将 WAR 文件部署到 Openshift?

    我想将 WAR 文件上传到我的开放式换档帐户 但这迫使我 使用 GIT 或 GITHUB here https www openshift com kb kb e1088 how to deploy pre compiled java ap
  • 从服务器获取数据时 Android 中的列表视图

    我正在尝试将数据异步填充到列表视图中 我正在从服务器检索数据作为 JSON 响应 MainActivity java public class MainActivity extends Activity url to make reques
  • Availability.h 类宏

    是否可以有一个自定义可用性宏 例如 OSX AVAILABLE STARTING 我需要它以同样的方式执行 我只需要更改它的名称以及参数的版本和数量 是的 当然了 Objective C 是 C 的严格超集 因此 C 宏非常适合您使用 并且