iOS中“deprecated”的含义是什么?废弃方法是否会引发异常或致命问题?
嘿,这个问题问到点子上了,很多iOS开发者刚碰到deprecated标记的时候都会有这些困惑,我来给你讲明白~
简单来说,苹果给某个API标上deprecated,意思就是:这个接口我们已经不推荐使用了,并且会在未来的某个iOS版本里彻底移除它。
这不是苹果突然搞事情,而是一种「提前预警」——要么是这个API的设计已经过时,有更高效、更安全的新API替代;要么是系统底层架构调整,旧接口已经不符合新的设计规范了。苹果给你留了足够的过渡期,让你有时间把代码从旧接口迁移到新接口,避免未来系统更新后App直接出问题。
这个得分情况说,不能一概而论:
短期内基本能正常工作
苹果不会刚标deprecated就把接口废掉,一般会给3-4个大版本的缓冲期。比如某个iOS 15标记为废弃的方法,大概率到iOS 18才会彻底移除。在移除之前,调用它基本能完成原本的功能,不会平白无故崩溃或者失效。但存在潜在的风险
虽然现在能用,但这些废弃的接口苹果已经停止维护了——也就是说,新系统里如果发现这些接口有bug,苹果不会再修复;而且在适配新特性(比如新硬件、新系统权限)的时候,这些旧接口可能会出现异常,比如返回错误数据、触发莫名其妙的警告,极端情况下确实可能导致崩溃,但这种「致命问题」大多出现在边缘场景,不是普遍情况。长远来看会给你挖坑
如果你一直依赖废弃接口,等到苹果彻底移除它的那天,你的App在新系统上就会直接报错,到时候再大规模修改代码会非常被动;而且App Store审核也可能会因为你使用过多过时API而给你提警告,影响上架或者更新。
举个实际的例子:以前的UIWebView在iOS 12就被标记为deprecated,iOS 14彻底移除。在iOS 12-13期间用它还能正常加载网页,但iOS 14之后调用就会直接崩溃,而且审核也不让过,当时很多开发者都赶在截止前紧急迁移到WKWebView。
总的来说,废弃接口不是不能用,但能不用就别用,尽快迁移到苹果推荐的替代方案才是稳妥的做法。
内容的提问来源于stack exchange,提问作者Bigair




