objective-c – Snow Leopard和Leopard的一个代码库

背景

我是一名开发人员,他正在为Mac构建应用程序.我即将抓住SNow Leopard.到目前为止,我一直在使用Leopard.我只做了大约一年的可可开发而不是非常激烈.

我特别读了很多关于雪豹和大中央调度的文章.我知道它使用了块,但我还没有深入了解块如何工作或者Grand Central dispatch如何工作.

我的问题

我如何最好地为SNow Leopard和Leopard开发一个代码库,同时充分利用SNow Leopard中新的多线程内容

NSOperationQueue

我的直觉不是直接在我的代码中处理GCD,但是当需要放置队列时,请使用NSOperationQueue,因为我已经阅读了来自SNow Leopard的Mike Ashes Q& A会话,NSOperationQueue充分利用了GCD和他在Leopard发现的crasher现已修复.

手动线程管理

但是,当涉及到管理特定的后台线程时,有没有办法利用SNow Leopard中更容易使用的线程管理功能而不会破坏Leopard中的东西?或者人们会建议每个操作系统有不同的目标,每个操作系统有不同的类?这对我来说似乎是一场等待发生的维护噩梦.

或者我可能只是没有完全为SNow Leopard完全优化我的应用程序,并坚持使用(void)detachNewThreadSelector:toTarget:withObject:或类似的东西.

人们怎么想?

解决方法

你对GCD的直觉印象是正确的.实际上,任何使用块的API都会被淘汰,除非您将该代码仅在SNow Leopard上运行.如果代码支持仅在SNow Leopard上可用的功能,那么这是有意义的,但如果它是你将在Leopard上支持功能,你可以在所有情况下使用Leopard代码路径,添加特定的SNow Leopard不会对用户提供任何明显改进的路径只会使代码复杂化并增加测试开销.

这尤其适用于线程管理或GCD等.那里的变化需要重要的体系结构,它不仅仅是:

if (sNowLeopard) {
  [NSSnazySNowLeopardClass doSomething];
} else {
  [NSBoringLeopardClass doSomethingEquivalent];
}

通常,如果更改是简单的Apple在类中处理它们而不更改API.换句话说,问题不在于您是否可以在SNow Leopard中使用更简单的线程管理代码,这就是为什么当您需要为Leopard执行硬版本时.额外的代码路径是一个额外的代码路径,直到您可以使用SNow Leopard上显着不同的API(即使它们比Leopard更容易使用)来删除Leopard支持,这只是额外的工作.

我会考虑你是否真的想要瞄准Leopard.雪豹的采用是公平的,SNow Leopard是一个廉价的升级版本,并且由于API的变化,来自小型开发人员的用户将面临很大的前进压力,他们只使用SNow Leopard应用程序.将长期留在Leopard上的唯一一组用户是那些技术不精通(不太可能安装太多第三方软件)的用户,以及那些仍在使用PPC Mac(未购买新Mac)的用户在3年内,所以可能不会购买太多软件).如果它是你认为将在3-9个月内发售的应用程序,我会认为只使用SNow Leopard可能是一个合理的选择,并将大大减少你的开发和测试负担.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...