自定义简单的iOS富文本解析模型

工作开发中经常遇到需要处理一些简单的富文本,比如要将一句话中的某些关键字加粗,例如:“My favorite fruite is Apple!” 这个问题本身不难解决,但是由于我们所有的 string 都需要做 localization,这就给工作增加了难度。于是我们提出一个简单的富文本解析模型,用于解决绝大多数的简单富文本需求。 我们的方案是将需要特殊格式的字段标记上自定义的 tag,通过 tag 解析来处理富文本,这样也解决了 localization 的问题。实现起来很简单,有兴趣的可以看下源码。 »

NSNotificationCenter 与 KVO 的实现比较

NSNotificationCenter 与 KVO 的作用都是类与类之间的通信,但是实现方式却十分不同。 NSNotificationCenter NSNotificationCenter 的实现原理相对简单,Mike Ash 简单实现了一个原理相类似的 NotificationCenter,感兴趣的可以阅读原文和源码。当然,系统内部的实现要考虑更多因素,比如线程安全之类,要比这个复杂得多。 我们可以简化猜测认为 NSNotificationCenter 就是维护一个 NSMutableDictionary,key 是由 notificationName 和 sender »

GCD 中 dispatch_once 的性能与实现

关于 dispatch_once 的性能,国外有开发者做过性能测试,原文在此。原文在单线程和多线程情况下测试了 @synchronized 与 dispatch_once 实现单例的性能对比,结果如下: Single threaded results ----------------------- @synchronized: 3.3829 seconds dispatch_once: 0.9891 seconds »

Linux 启动过程(三)

内核被加载后,第一个运行的程序是 /sbin/init,Ubuntu 下该程序读取 /etc/init/rc-sysinit.conf 文件,依据此文件来设定 Linux 的 runlevel,进行对应的初始化工作。 runlevel runlevel 可以认为是系统状态,进入每个 runlevel 需要启动或关闭相应的一系列服务 (services),这些服务以初始化脚本的方式存放在 /etc/init. »

Linux 启动过程(二)

vmlinuz Boot loader 根据 grub.cfg 中的配置选择对应的内核 vmlinuz 引导入内存。内核驻留于操作系统与应用程序的整个活动周期,应用程序在用户空间内运行,处于内核控制之下。 从 Linux 内核2.6开始,内核的编译需要两层 Makefile。简而言之,顶层 Makefile 生成未压缩的原始内核 vmlinux,vmlinx 体积较大且不能被 boot »