- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是一名正在为 Mac 构建应用程序的开发人员。我即将接触 Snow Leopard。到目前为止,我一直在 Leopard 上构建。我只做了大约一年的 Cocoa 开发,不是很认真。
我读了很多关于 Snow Leopard 和 Grand Central Dispatch 的文章。我知道它使用 block ,但我没有深入了解 block 的工作原理或 Grand Central Dispatch 的工作原理。
我如何才能最好地为 Snow Leopard 和 Leopard 开发一个代码库,同时最大程度地利用 Snow Leopard 中新的多线程功能?
NSOperationQueue
我的直觉是不直接在我的代码中处理 GCD,但是当事情需要放入队列时,使用 NSOperationQueue,因为我从 Mike Ashes 的问答环节中了解到,在 Snow Leopard 中,NSOperationQueue 充分利用了 GCD 和他在 Leopard 中发现的 crasher 现已修复。
手动线程管理
但是,当谈到管理特定的后台线程时,有没有什么方法可以在不破坏 Leopard 的情况下利用 Snow Leopard 中更易于使用的线程管理功能?或者人们会建议我为每个操作系统设置不同的目标,每个操作系统都有一些不同的类吗?这对我来说就像一场等待发生的维护噩梦。
或者也许我应该忍受没有针对 Snow Leopard 完全优化我的应用程序并坚持使用 +(void)detachNewThreadSelector:toTarget:withObject:
或类似的东西。
人们怎么想?
最佳答案
您对 GCD 的直觉印象是正确的。事实上,任何使用 block 的 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 的采用率相当高,Snow Leopard 是一种廉价的升级,并且由于 API 的变化,小型开发人员只做 Snow Leopard 应用程序会给用户带来很大的前瞻性压力。唯一会长期使用 Leopard 的用户是那些技术上不精通的用户(他们不太可能安装很多第 3 方软件),以及那些仍在使用 PPC Mac 的用户(他们还没有购买新的 Mac) 3 年内,所以可能不会购买太多软件)。如果您认为该应用程序将在 3-9 个月内发布,我认为仅使用 Snow Leopard 可能是一个合理的选择,并且会大大减轻您的开发和测试负担。
关于objective-c - Snow Leopard 和 Leopard 的一个代码库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1607432/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我打开 ScriptEditor,点击 Record,点击文档中的一些图标,打开 System Preferences,然后点击 ScriptEditor 中的 stop 并且没有任何 react ,
到目前为止,所有 Mac App Store 开发人员都知道所有应用程序都必须启用新的 OSX Lion Sandboxing。对于现有的应用程序,我们必须在 XCode 4.2 中启用它并设置数据迁
一切都在 10.5 上运行,但现在我的 PackageMaker 安装项目坏了。几天来我一直在与一个问题作斗争,要么 Snow Leopard (OS X 10.6.1) 破坏了 PackageMak
只是想知道是否有人成功地做到了这一点,以及使其发挥作用的步骤是什么。 提前致谢。 最佳答案 GrowlSafari 使用 mach_inject .. 它可以工作.. 我尝试过逆向工程,但我不明白为什
这是对 Controlling volume of running applications in Mac OS X via Objective-C 的跟进,其中解释了如何为 10.5 或更早版本设置
我刚刚在系统上安装了 Ubuntu 10.10 桌面以进行一些开发工作。我想在我的 MacBook 上运行 X 服务器环境而不是键盘跳动(Ubuntu 机器上的图形系统不是很好)。 在网上四处闲逛,我
我正在尝试调试我正在处理的应用程序上的段错误(当然适用于 linux,所以我不能将其用作调试核心转储的后备)。无论如何,我已经设置了“ulimit -c unlimited”并且雪豹报告“段错误(核心
我是OS X的新手,并开始使用XCode。在这里,我在使用C++项目时发现了干净的构建选项,但都被禁用了,我该如何使用或激活它们? 谢谢 最佳答案 只需执行Command-Option-Shift-K
我在 Mac OS X Snow Leopard 上使用 Qt 和 Poco 创建了一个小型桌面应用程序。 Qt 工作正常,但是一旦我开始与 Poco 链接,我就会收到以下警告: ld: warnin
这是雪豹上的 XCode 3.2.6 (gcc 4.2.1)。试图编译 Hello World program并得到一个段错误,带有如下所示的崩溃报告(这是尝试 Learn C the Hard Wa
我已经设法让我的安装全部搞砸了,因为我是一个新手,搞砸是我擅长的。 1)任何人都可以引用一组可靠的设置说明吗? 2)我可以通过macports卸载并从头开始(密码和所有)吗?我试过了,在卸载后一堆 m
我正在 Snow Leopard 上开发 OpenCL 代码,并且了解 OpenCL 即时编译是由 Clang/LLVM 完成的。是否使用了 C 预处理器?有没有办法用编译器设置预处理定义?存在哪些定
我最近想知道 Mac OS X 如何存储文件的缩略图。经过一番谷歌搜索,我发现了“资源 fork ”,这是 Apple 的 HFS 文件系统显然独有的一个功能。 我真的不喜欢有资源 fork 的想法,
我在 Mountain Lion 上使用 Xcode 4.5 开发的应用程序在 Lion 和 ML 上完美运行。 我的雪豹测试人员报告说,当应用程序启动时,它被禁用。他的意思是没有任何控件处于事件状态
我正在尝试弄清楚如何根据文件或目录的大小分别将文件(或目录)的字节大小转换为千字节、兆字节、千兆字节等,以便与 Finder 在面板中显示的内容相匹配当您点击“获取信息”时。 我得到的字节大小与 Fi
我正在开发一个基于 NSDocument 的应用程序,每个窗口(选项卡)有多个文档。这意味着我需要自己处理窗口的关闭,以便我可以在窗口关闭之前查看属于该窗口的文档。为了做到这一点,我使用 standa
我最近在Mac Snow Leopard上安装了Idea IntelliJ 10.0.3。每当我尝试打开项目时,IntelliJ都会开始索引编制,并且在此过程中崩溃!每次都会发生。 我的机器上安装了J
我在 usr/local/内安装了标准 Homebrew 程序 当我尝试时: Larson-2:~ larson$ brew install postgresql Error: Cannot writ
我尝试自己搜索和搜索来解决这个问题,但我无法让它工作。 :( 我在 Snow Leopard 10.6.4 中并尝试设置我的 Django 环境,首先我将 python 升级到 2.6.5,安装了 d
我是一名优秀的程序员,十分优秀!