使用 iOS 4.0 中的方法时,iOS 3.0 会崩溃吗?
Posted
技术标签:
【中文标题】使用 iOS 4.0 中的方法时,iOS 3.0 会崩溃吗?【英文标题】:Would iOS 3.0 crash when using methods from iOS 4.0? 【发布时间】:2011-02-17 10:13:31 【问题描述】:我们正在构建一个处理 iPhone 通讯录的应用程序。在 4.0 版中,Apple 在地址簿中实现了源,并且还提供了一些方法(检索源、写入源等)。此功能在小于 4.0 的 ios 中不存在。
我们已经更新了我们的应用程序以适应大约 4.0 和 4.2 处理地址簿来源的方式,但我还没有在 3.0 设备上测试它。
一般来说,如果您在没有这些方法的旧版本操作系统上使用更新的 SDK 方法,应用程序会崩溃吗?
谢谢!
【问题讨论】:
【参考方案1】:是的,它会崩溃。
要么检查应用程序运行的 iOS 版本,以确定是否使用特定功能,要么将有问题的调用放在 if ([object respondsToSelector:@selector])
中。
如果您不想处理此问题并确保它永远不会崩溃,只需让您的应用可用于 iOS 4.0 及更高版本。
【讨论】:
【参考方案2】:是的,它会崩溃。但是有办法防止这种情况发生。
昨天我用 Event Kit 做了类似的事情。
我创建了自己的 EventHandler 对象,如果没有 Event Kit,它会在 init 中返回 nil。对 nil 的调用是完全合法的,因此这个抽象类可以防止 iOS3 上的崩溃。而且我不需要对每次调用都进行 NSClassFromString 检查。
由于缺少 iOS3 设备,我还无法对其进行测试,但我希望它能工作。
- (id)init
self = [super init];
if (self)
Class eventKitClass = NSClassFromString(@"EKEventStore");
if(eventKitClass)
// iOS4++
// more init
else
// iOS3
[self release];
return nil;
return self;
您必须弱链接 Event Kit 框架。 [目标/您的目标/获取信息/常规]
编辑:我误读了您的问题,您不是在询问活动套件。但该方法也适用于地址簿框架。
EDIT2:由于地址簿从 iOS 2.0 开始可用,因此我的方法对您毫无用处。 你必须使用
if ([foo respondsToSelector:@selector(doSomething:)])
[foo doSomething:bar];
对于您进行的每个呼叫,iOS3 中可能不存在。就像其他回答者所说的那样。
【讨论】:
谁赞成这个必须和我有相同的阅读理解问题^^以上是关于使用 iOS 4.0 中的方法时,iOS 3.0 会崩溃吗?的主要内容,如果未能解决你的问题,请参考以下文章
检查 iOS 版本是不是与 PHP 兼容,从 iOS 3.0 到 IOS 4.0 或更高版本
在 iOS 4.0 上释放 Autoreleasepool 崩溃(以及在 4.1 上......)
在 Swift 3.0 (Alamofire 4.4.0) 中的一些请求后,Alamofire 停止工作
Swift 3.0 Alamofire 4.0 - Domain=NSURLErrorDomain Code=-999 “取消”