在旧版 iOS 中使用私有 API 属性,在新版 iOS 中使用公共 API 属性

发布于 2024-09-27 10:27:08 字数 237 浏览 2 评论 0原文

我知道禁止使用私有 API 函数或类,因为它们可能会在 iOS 的未来版本中发生更改。所以我想知道在新的 iOS 中是否允许私有函数现在公开。

我的例子是 MPMoviePlayerController,在 3.2 之前的 iOS 中,它有一个名为 currentTime 的私有属性。从版本 3.2 开始,它称为 currentPlaybackTime 并且可以使用。如果可以在新版本中使用,那么它可以在旧版本中使用吗?

谢谢

I know it is forbidden to use private API functions or classes, because they can change in a future version of iOS. So I wondering if it is allowed if a private function is now public in a new iOS.

My example is MPMoviePlayerController which has a private property called currentTime in iOS before 3.2. Starting version 3.2, it is called currentPlaybackTime and can be used. If it can be used in newer versions, can it be used in older ?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昇り龍 2024-10-04 10:27:08

不,在旧版本的 iOS 上,该属性仍然是私有的,我们只能猜测原因。

在这种情况下,您应该采取与寻求支持以前操作系统中不可用的新功能时相同的方法:根据可用性有条件地使用它们。

如果您想使用 currentPlaybackTime 属性,您应该对声明它的框架进行弱链接,并对其可用性进行运行时检查。

像这样的事情:

if ([playerController respondsToSelector:@selector(currentPlaybackTime)])
{
    // do something with currentPlaybackTime
}
else
{
    // fail-over to something supported and not private.
}

请记住:编译 iOS 应用程序时,您应该针对最新且最好的 iOS SDK 版本进行编译,并将部署目标设置设置为您愿意支持的最旧的 iOS 版本。

No, on older version of iOS the property is still private, we can only guess at reasons why.

In cases like this, you should take the same approach as you would when looking to support new features that aren't available in a previous OS: use them conditionally based on availability.

If you want to use the currentPlaybackTime property, you should weak-link against the framework in which it is declared and do a runtime check for its availability.

Something like this:

if ([playerController respondsToSelector:@selector(currentPlaybackTime)])
{
    // do something with currentPlaybackTime
}
else
{
    // fail-over to something supported and not private.
}

Remember: when compiling your iOS app, you should be compiling against the lastest-and-greatest iOS SDK version and setting your Deployment Target setting to the oldest version of iOS that you're willing to support.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文