Cocoa touch 为多个iOS版本生成时处理不推荐使用的符号和方法 我是一个C++开发人员,正在向iPhone世界过渡,我希望能得到一些帮助。

Cocoa touch 为多个iOS版本生成时处理不推荐使用的符号和方法 我是一个C++开发人员,正在向iPhone世界过渡,我希望能得到一些帮助。,cocoa-touch,macos,iphone-sdk-3.0,ios4,deprecated,Cocoa Touch,Macos,Iphone Sdk 3.0,Ios4,Deprecated,比如说,MPMoviePlayerController用于在iOS 3.1及更早版本中发布mpmovieplayercontentpreloadfinishnotification通知 但是,现在不推荐使用此通知 我希望我的应用程序能够在每一台安装iOS 3及以上版本的iPhone上运行 如果我使用基本sdk 4.2进行开发,当我将我的应用程序安装在iOS 3.2的iphone上时,会发生什么?该应用程序是否附带链接到它的sdk(例如mfc静态链接) 如果我理解正确的话,比如在iOS 3.2的i

比如说,
MPMoviePlayerController
用于在iOS 3.1及更早版本中发布
mpmovieplayercontentpreloadfinishnotification
通知

但是,现在不推荐使用此通知

我希望我的应用程序能够在每一台安装iOS 3及以上版本的iPhone上运行

如果我使用基本sdk 4.2进行开发,当我将我的应用程序安装在iOS 3.2的iphone上时,会发生什么?该应用程序是否附带链接到它的sdk(例如mfc静态链接)

如果我理解正确的话,比如在iOS 3.2的iPhone上,该通知仍然会被调用。(如果我在早期sdk上调用一个函数,假设它不是像我上面所问的那样静态链接的)

这是否意味着如果我现在正在编写一个新的应用程序,我仍然需要处理那些不推荐使用的通知

我无法理解这一点,希望你能给我解释一下


谢谢

如果在运行3.2的设备上使用iOS 4.2附带的符号,您将遇到崩溃

解决这个问题的方法是根据新符号在运行时是否可用,有条件地使用它们

例如

同样的方法也可以用于在3.x上运行时在4.x中新增的类:

if (NSClassFromString(@"MyAwesomeNewClass") != nil)
{
    // awesome, it's not NULL, we can use it
}
else
{
    // not so awesome, we'll use the old, deprecated one
    // but at least we won't crash
}

根据经验,您应该始终根据开发人员工具提供的最新iOS SDK进行编译和链接,然后将部署目标构建设置设置为您希望支持的最旧iOS版本。然后使用这些条件来利用新功能,并在没有新功能时优雅地后退而不会崩溃。

谢谢你的回答,Jasarien,但是你说的所有事情我都已经知道了,我想理解其中的逻辑。如果你能再次阅读我的问题并详细说明,那就太好了。谢谢!我不确定我是否完全理解你想问什么。就我的回答而言,我认为它涵盖了这样一个事实:是的,您仍然必须使用此条件方法处理旧的3.x通知以及新的4.x通知。作为澄清,系统框架(如UIKit和MediaPlayer)是动态链接的,而不是静态链接的。
if (NSClassFromString(@"MyAwesomeNewClass") != nil)
{
    // awesome, it's not NULL, we can use it
}
else
{
    // not so awesome, we'll use the old, deprecated one
    // but at least we won't crash
}