2010-12-10 49 views
1

我是一位正在过渡到iPhone世界的C++开发人员,我很乐意获得有关某些东西的帮助。在为多个iOS版本构建时处理不推荐使用的符号和方法

比方说,例如,MPMoviePlayerController用于发布iOS 3.1及更早版本中的MPMoviePlayerContentPreloadDidFinishNotification通知。

但是,现在这个通知已被弃用。

我希望我的应用能够在iOS 3及以上版本的所有iPhone上运行。

如果我正在开发使用基础sdk 4.2,当我在iOS 3.2上安装我的应用程序时,会发生什么情况?该应用程序是否带有链接到它的sdk(例如,mfc静态链接)?

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

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

我无法理解这一点,并会感谢任何解释。

感谢

回答

2

如果您使用已运行3.2,你会遇到一个崩溃的设备上附带的iOS 4.2的象征。

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

例如,

if (&NewNotificationSymbol != NULL) 
{ 
    // 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 
} 

同样的方法可以用于上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,然后将您的Deployment Target构建设置设置为您希望支持的最旧版本的iOS。然后使用这些条件来利用新功能并优雅地回退,如果它们不可用则不会崩溃。

+0

感谢您对Jasarien的回答,但是您所说的我已经知道的所有事情,我都想了解下面的逻辑。 – Idan 2010-12-10 22:24:02

+0

如果你可以再次阅读我的问题,并阐述那将是伟大的。谢谢! – Idan 2010-12-10 22:24:39

+0

我不确定我完全理解你想问什么。就我的答案而言,我认为它涵盖了这样一个事实,即,您仍然必须使用此条件方法来处理较旧的3.x通知以及新的4.x通知。 – Jasarien 2010-12-11 00:40:54