我是一名开发人员,他正在为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等.那里的变化需要重要的体系结构,它不仅仅是:
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可能是一个合理的选择,并将大大减少你的开发和测试负担.