我有一个问题,但可以通过几个相关问题之一来回答。
我正在iOS上开发一个简单的纸牌游戏,要求我与主UI线程同时运行一些AI和游戏逻辑。我希望我的应用程序能够与尽可能多的设备兼容,但我知道没有必要针对实际市场份额非常小的平台。我可能会避免使用Grand Central Dispatch,因为它需要iOS 4.0或更高版本。 OSX开发人员库列出了自OSX 10.5以来可用的NSOperation,以及iOS v1之后几个月发布的NSOperation(我现在假设它可以在iOS上运行)。支持NSThread我敢肯定。
我很好奇iOS设备版本的分发。 Google会在此处发布每个版本的手机数量数据:
http://developer.android.com/resources/dashboard/platform-versions.html
我没有发现任何类似Apple的东西(是的,他们会释放它)。还有其他地方我可以找到关于iOS的类似信息吗?
我知道对于任何给定的设备,NSThread无疑是兼容的。 NSOperation可能兼容,GCD也许。但是在一般情况下应该做些什么呢?就像我将来想要实现的其他功能一样。
此外,对于手头的实际问题的任何建议也将受到赞赏。
答案 0 :(得分:3)
NSThread和NSOperation都可在iOS2.0及更高版本中使用。
此question讨论了在现有应用中切断对旧iOS版本的支持的想法。 another讨论了有关版本支持的更多信息。
如果您想支持旧的iOS版本,但仍然在较新的iOS版本中使用某些功能,您可能需要做两件事:
测试方法可用性:
//UITableView - backgroundView is available in iOS3.2 and later.
if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
UIImageView *theBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"back.png"]];
[self.tableView setBackgroundView:theBackgroundView];
[theBackgroundView release];
} else {
//on devices running iOS 3.2 and below, the background remains unchanged, default.
}
弱链接:
iOS SDK 4.2中的新功能(不是固件),对于针对SDK 4.2编译的项目,您可以检查类的存在,只需:
if ([UIPrintInteractionController class]) {
// Create an instance of the class and use it.
} else {
// The print interaction controller is not available.
}
Apple docs。 (搜索弱链接)
在iOS SDK 4.2之前,您可以使用具有类名称的字符串来执行此操作:
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
if (messageClass != nil) {
// Check whether the current device is configured for sending SMS messages
if ([messageClass canSendText]) {
[self displaySMSComposerSheet];
}
}