处理 iPhone 中已弃用的方法

2023-12-21

您如何处理 iPhone 中已弃用的方法,这些方法要求您使用较新的方法,而在旧版本中不可用?

考虑以下情况setStatusBarHidden:animated:,在 iOS 3.2 中已弃用。该文档提示您使用setStatusBarHidden:withAnimation:,仅在 iOS 3.2 或更高版本中可用。

如果我理解正确的话,这意味着要针对所有设备(iOS 3.0 或更高版本),我必须首先询问是否setStatusBarHidden:withAnimation:可用。如果是,请使用它。如果没有,请使用已弃用的方法。但我仍然会收到弃用警告。

这是正确的吗(请说不是!)?如果是,有什么方法可以抑制此弃用警告,或者向编译器表明我已经处理了该问题?


我找到了一个similar https://stackoverflow.com/questions/2853184/suppressing-line-specific-xcode-compiler-warnings假设的问题yes,这是处理已弃用方法的正确方法,并且no,没有办法根据具体情况抑制弃用警告,但有一些技巧会误导编译器。

为了处理示例案例,我决定使用以下技巧之一创建一个 util 类:

@protocol UIApplicationDeprecated

- (void) setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated;

@end

@implementation UIUtils

+ (void) setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated {
    if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
        [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated ? UIStatusBarAnimationSlide : UIStatusBarAnimationNone]; 
    } else { 
        id<UIApplicationDeprecated> app = (id)[UIApplication sharedApplication];
        [app setStatusBarHidden:hidden animated:animated];
    }
}

@end

如果我没有记错的话respondsToSelector成本高昂。这可以针对性能进行优化,以记住第一次查询后是否存在新选择器,从而避免在后续调用中进行反射。

来自 Java 背景的我发现这种处理弃用的方式令人震惊,而且我仍然不敢相信这就是 iOS 设计者期望我们处理这个问题的方式。关于这个主题的更多想法将不胜感激。

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

处理 iPhone 中已弃用的方法 的相关文章

  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • 如何知道用户何时更改设置包

    我让用户在 iPhone 的设置区域中更改他们的设置 在下一次网络同步期间 我想将用户更改发送到服务器 但前提是做出改变 但是我如何知道用户何时在设置区域中进行了更改 如果可以的话 我想避免选择总是发送信息 无论是否更改 或者首先从服务器获
  • Swift Generics 在使用继承时不会实例化泛型

    我有课Alpha and Berry class Alpha class Berry Alpha 我有一个使用继承及其泛型的函数 func myFunc
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • NSString – 静态还是内联?有性能提升吗?

    如果我写的话会有任何性能提升吗 NSString helloStringWithName NSString name static NSString formatString Hello return NSString stringWith
  • XCode 无法将 iPhone 应用程序部署到 iPhone 3GS

    因此 我构建了我的 iPhone 应用程序 它在模拟器中运行良好 因此我想将其部署到我的 iPhone 上进行最后一轮测试 然后再使用我的分发配置文件进行公开 Beta 测试 我已经这样做过很多次了 从来没有出现过问题 然而 自从上次测试运
  • UIScrollView setZoomScale 将应用的旋转设置回零

    我已经从事地图替换工作很长一段时间了 整个事情的工作原理是UIScrollView由一个支持CATiledLayer 为了旋转我的地图 我旋转图层本身 使用CATransform3DMakeRotation 到目前为止效果很好 但如果我打电
  • 当地图视图只是屏幕的一部分时,如何在 iOS 模拟器中进行捏合?

    我在 iPad 上有一个视图 我正在添加MKMapView也就是说 全屏高度的一半 然而 当我尝试在 iOS 模拟器上进行捏合时 它不起作用 因为 to nubs 填充了模拟器上的整个 iPad 视图 And so with the map
  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • 更改组织以使用 Xcode 9 在 iTunes Connect 上上传二进制文件

    我在 Xcode9 上配置了多个团队 当我尝试将二进制文件上传到 Xcode 9 上的 iTunes Connect 时 没有更改团队的选项 并且出现以下错误 ERROR ITMS 4088 来自苹果开发者论坛的解决方案 1 正常存档2 窗
  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • 虚拟乐器 iPhone 应用程序中的 VoiceOver 辅助功能?

    我收到盲人用户的评论 称我的一些声音和音乐相关应用程序只能在关闭 VoiceOver 的情况下使用 在 iOS 设备上启用 VoiceOver 辅助功能后 是否可以启用音乐键盘或鼓垫触摸区域 以便在点击键盘键或虚拟鼓组 等 时可以立即播放音
  • AVAssetExportSession 为零 iPhone 7 - Plus 模拟器

    AVAssetExportSession在 iPhone 6 及以下版本上运行良好 但在 iPhone 7 iPhone 7 Plus 模拟器上运行不佳 Xcode 8 0 这段代码return nil在exportSession中 当在i
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • 根据 iOS 版本使用不同的类实现?

    iOS 11 最近添加了一个我想使用的新功能 但我仍然需要支持旧版本的 iOS 有没有一种方法可以将同一个类编写两次 并让较新版本的 iOS 使用该类的一个版本 而旧版本的 iOS 使用另一个版本 注 最初我用的是if available
  • 在 iPhone 中缝合图片

    我想并排缝合2张png 在Cocoa中 我会使用 NSImage initWithSize 然后只是drawInRect 但是 UIImage 没有 initWithSize 类 我现在该怎么做 Use UIGraphicsBeginIma
  • 如何阻止 UITableView moveRowAt IndexPath 在重新排序时留下空白行

    我遇到一个问题 在重新排序 UITableViewCells 时 tableView 不随单元格滚动 仅出现一个空白行 任何后续滚动都会出现数组越界错误 堆栈跟踪中没有我的任何代码 这是该问题的快速视频 http www screencas
  • 如何在 iOS 8 中关闭两个 UIViewController?

    我正在使用 Objective C 开发 iPhone 应用程序 由于我需要一次关闭两个 UIViewController 所以我使用下面的代码 self presentingViewController presentingViewCon
  • Xcode 8 / Swift 3:“UIViewController 类型的表达式?未使用”警告

    我有以下函数 它之前编译得很干净 但在 Xcode 8 中生成警告 func exitViewController navigationController popViewController animated true UIViewCon

随机推荐

  • 如何使用 sns.boxplot 或 sns.catplot 添加剖面线到箱线图

    I need to add hatches to a categorical box plot What I have is this 我需要的是这样的 带有中线 我尝试过的是这段代码 exercise sns load dataset e
  • 存储库模式与活动记录模式相同吗?

    他们似乎很相似 他们是不同的 活动记录模式定义 An包装数据库中的行的对象表或视图 封装数据访问 并在该数据上添加域逻辑 在存储库模式中全部数据访问放在单独的类中并通过实例方法进行访问 对我来说 这样做是有益的 因为数据访问现在封装在一个单
  • 在哪里存储桌面应用程序的用户数据?

    我正在开发 C NET 桌面应用程序 我希望用户能够创建新的数据库文件 我是桌面应用程序的新手 我真的不知道存储这些文件的最佳位置在哪里 我想将它们存储在我的应用程序文件夹中 但我读到这不是最好的解决方案 我应该将它们存储在 C 中还是有其
  • 需要 XAML 教程 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Silverlight 新手 我需要一个教程来帮助我理解 XAML 样式 资源和对象绑定到 UI
  • 如何根据环境设置facebook认证密钥?

    我有一个 Rails 应用程序 它使用omniauth 通过 Facebook 对访问者进行身份验证 当您向 Facebook 注册应用程序时 您必须注册一个回调 URL 一旦完成身份验证过程 他们将重定向到该回调 URL 由于我的生产站点
  • 使用ngx-bootstrap modalService时添加自定义类的方法

    当寻找ngx引导程序 https valor software com ngx bootstrap 源代码 https github com valor software ngx bootstrap here 模态选项 class ts h
  • x86 PIC,QEMU 在所有 CPU 上引发中断是否正确?

    我最近不得不解决 x86 PIC 的专有操作系统问题 其中操作系统预期定时器中断仅在 CPU0 上 我启用了 IO APIC 来解决这个问题并进行了 CPU 控制 因此中断仅到达 CPU0 问题解决了 有人告诉我 我们的硬件已经损坏 无法做
  • Tensorflow:使用 CPU 的特定核心执行操作

    目前可以通过 tf device 函数指定用于特定操作的 CPU 或 GPU 但是无论如何您都可以指定一个coreCPU 的 目前没有用于将操作固定到特定核心的 API 尽管这将是一个很好的选择功能要求 https github com t
  • 子类化 UIAlertController 并遇到运行时错误

    我是 iOS 和 OSX 编程新手 决定从 Swift 开始 使用 iOS8 API 来测试应用程序 并尝试一些我在其他环境中使用的编程技术 然而 我遇到了一个奇怪的情况 我希望有人能够识别并帮助我 这涉及到 UIAlertControll
  • 自定义 std::allocator_traits::construct

    我想定制std vector不默认构造元素类型的行为 例如int 因为对于大向量来说这样做的成本很高 看着这个 我认为做到这一点的唯一方法就是专业化std allocator traits
  • 当 ssh 管道损坏时停止 python 程序

    我正在编写一个带有无限 while 循环的 python 脚本 我正在 ssh 上运行该脚本 我希望脚本在有人杀死 ssh 时终止 例如 脚本 script py while True do something 将运行为 ssh foo s
  • 如何使用 WebDriver 单击

    这是一段UI代码
  • 重写从 us-central1 以外的其他区域从托管到云功能的路由

    我有一个http触发的云函数部署在欧洲 西部1区域和使用 firebase 托管托管的 Web 应用程序 我还在我的中设置了对该 http 函数的重写firebase json file 我注意到重写仅适用于美国中央1功能 有没有办法让重写
  • django根据文本长度过滤

    我想根据文本的长度过滤我的模型 就像是 MyModel objects filter len text gt 10 其中 text 是 MyModel 模型中的 Char 或 Text 字段 对于现代 Django gt 1 9 海内克 h
  • (为什么)使用未初始化的变量是未定义的行为?

    如果我有 unsigned int x x x 很明显x should在这个表达式之后为零 但是我到处都看到 他们说behavior这段代码的值是未定义的 而不仅仅是x 直到减法之前 两个问题 Is the behavior这段代码确实未定
  • 在Matlab中,如何将嵌套for循环生成的值存储在数组中?

    y find sA l y sA for i 1 10 for j 1 l l sA end y y length y end 我想知道如何存储生成的值l 对于每次迭代 在数组中 当我尝试做类似 l l l sA 的事情时我得到了 奇怪 的
  • 静态 OpenSSL *.a 库未链接目标二进制文件(使用带有 SSL 的静态编译 Qt)

    马上 对于问题的长度感到抱歉 但这是由于我提供的所有附加详细信息 我希望这些详细信息可以帮助更快地解决问题 我想实现什么目标 我需要创建一个具有 SSL 支持的便携式 一体化 应用程序 问题是什么 因此 我面临的核心问题是将 SSL 支持纳
  • Entity Framework 4.1 Code First - 未插入计算/计算列

    我有以下带有计算 计算列的实体 public EntityA Key Required DatabaseGenerated DatabaseGeneratedOption Identity public int Id get set Dat
  • Javascript:如何从网页检索文本

    我想以字符串形式检索网页中的文本 这可能吗 我是 JavaScript 新手 例如 var url http en wikipedia org wiki Programming var result url getText lt store
  • 处理 iPhone 中已弃用的方法

    您如何处理 iPhone 中已弃用的方法 这些方法要求您使用较新的方法 而在旧版本中不可用 考虑以下情况setStatusBarHidden animated 在 iOS 3 2 中已弃用 该文档提示您使用setStatusBarHidde