(翻译)如何让didUpdateLocation兼容iOS 5和iOS 6

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 是CLLocationManagerDelegate protocol 中的一个常用方法,它让你的应用接收更新位置信息,当检测到任何位置变化。新的位置详情存储在 newLocation 中,它是一个 CLLocation.

当 iOS 6 启动,上述方法被废弃了,建议使用新版本方法 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 或简称locationManager:didUpdateLocations:.

这个快速教程的的目的是解释如何处理废弃方法,关于它什么是应该完成的以及你在哪里可以找出关于改变的更多细节。如果你想了解如何使用这个新的 locationManager:didUpdateLocations: 方法,看下didUpdateLocations tutorial,它解释了如何使用方法提供的NSArray.

当方法被废弃了

当 iOS 升级了(这会经常发生),Apple 找到新的或更有效方法。当这发生了,方法可以被标记为废弃并在如何使用的地方给出一个提示。具体到 CLLocationManagerDelegate,你可以看到文档中推荐了一个不同的方法。虽然你仍然可以使用废弃的方法,即使是在已经废弃的 iOS 版本中,Apple 在未来某个时间点也许会删除掉这个方法当 iOS 升级了。在那个时间点,你可能需要修改你的代码,提交到 Apple Store 通过审核流程。

继续阅读

Core Data 使用笔记

  1. Core Data是什么?
  2. 为什么使用Core Data?
  3. 如何使用Core Data?

Core Data是什么?

Core Data is a framework that you use to manage the model layer objects in your application. It provides generalized and automated solutions to common tasks associated with object life-cycle and object graph management, including persistence.

Core Data 是一个你在应用中用来管理模型层对象的框架。 它为关联对象生命周期和对象图管理的常见任务提供了通用的和自动的解决方案,包括持久化。

为什么使用Core Data?

There are a number of reasons why it may be appropriate for you to use Core Data. One of the simplest metrics is that, with Core Data, the amount of code you write to support the model layer of your application is typically 50% to 70% smaller as measured by lines of code. This is primarily due to the features listed above—the features Core Data provides are features you don’t have to implement yourself. Moreover they’re features you don’t have to test yourself, and in particular you don’t have to optimize yourself.

Core Data 的优点:

  • 允许你高效地从永久存储中获取模型对象和保存改变。
  • 提供一个记录模型对象改变的架构。它能让你自动支持undo和redo,维护对象之间的关系。
  • 允许你去维护模型对象不相交集合的编辑。不相交集合很有用,例如,让用户在一个可能会被丢弃的视图中编辑而不在另一个视图中显示的数据。
  • 允许你在任何时候只在内存中保持模型对象的一个子集。这对保持你应用尽可能地使用少的内存很有用。
  • 拥有数据存储版本和迁移的架构。该架构让你很容易把旧版本数据文件升级为现在的版本。
继续阅读

iOS 并发编程之 GCD

在 iOS 并发编程之 Operation 中我们提到了 GCD 出现的背景,这篇文章是我对它的使用总结。

GCD 是什么?

Grand Central Dispatch (GCD) dispatch queues are a powerful tool for performing tasks. Dispatch queues let you execute arbitrary blocks of code either asynchronously or synchronously with respect to the caller.

GCD 分发队列是执行任务的强大工具。 分发队列可以让你异步或同步运行任务代码块。

为什么使用 GCD?

我们使用 GCD 的原因很可能是我们想要异步或同步运行执行任务,并且还想获得以下优势:

  • 直接简单的编程接口;
  • 自动、整体的线程池管理;
  • 高效的内存管理;
  • 负载时不干扰内核;
  • 异步分发任务到分派队列不会造成死锁;
  • 优雅地处理竞争;
  • 串行分派队列为锁和其他同步操作提供了更高效选择;

如何使用 GCD?

在 GCD 是什么部分,我们指出它是执行任务的分发队列。除了核心的分发队列,GCD 还提供了几个其他的使用分发队列的技术来帮助我们管理代码。

Dispatch groups

Dispatch group 是一种监视一系列块对象已完成的方法。(你可以根据需求同步或异步地监视块。)它为需要依赖其他任务完成的代码提供了有用的同步机制。

Dispatch semaphores

Dispatch semaphores 类似传统的信号量,但是它通常更加高效。它仅仅在信号量不可用需要阻塞线程时才向下调用到内核。如果信号量可用,无需内核调用。

Dispatch sources

Dispatch source 产生通知响应指定的系统事件。你可以使用 dispatch sources 来监视像进程通知,信号和描述符等类似事件。当事件发生时,dispatch source 异步地提交你的任务到指定分发队列去处理。

所以要掌握如何使用 GCD,我们需要学习如何使用 Dispatch queue, Dispatch groups, Dispatch semaphores 和 Dispatch sources。

继续阅读