SQLite3性能深入分析

SQLite3是移动终端最常用的数据库,它非常轻量,编译后只有数百KB。但它麻雀虽小,五脏俱全,它可以支持多线程,支持事务、约束以及几乎所有的SQL常见特性。iOS中很多App经常会使用到SQLite,在使用SQLite的时候经常会遇到其性能问题。本文将深入SQLite内部实现,分析其性能优化途径。

阅读更多

Objective-C之优雅的命名

There are only two hard things in Computer Science: cache invalidation and naming things.
在计算机科学中只有两件难事:缓存失效和命名。

– Phil Karlton

计算机语言是人和计算机之间通讯的媒介。好的代码应该是就像人对计算机说话那样,自然而优雅。命名看上去是一件很简单的事,而往往越是简单的事越难做好,否则大师们也不会把命名看成是计算机界的难题了。如何把Objective-C这门计算机语言以优雅的方式“说”出,还是比较考验工程师对它的理解深度的。在苹果的SDK中有大量的API,我们可以从这些API中体会到一些命名的艺术。

阅读更多

最近开发中遇到的问题汇总(2014年4月2日)

有段时间没有归纳开发中遇到的一些问题了,今天就写一下之前开发中遇到的几个问题。希望这篇文章能让读者在以后的开发中少走弯路。本文将依次介绍《UIButton在Disabled状态下标题混乱的问题》、《含软连字符的字符串计算显示长度的问题》和《UINavigationBar左右两边按钮可同时点击的问题》。

阅读更多

Mac系统下创建右键打开Shell的功能

在开发过程中经常会用到Shell(“命令行”、“终端” or “控制台”?),而我们可以用Mac中一个叫终端的App进入Shell。打开这个App后,默认进入用户的home目录,即“/Users/username”,而这往往不是我们想要的工作目录。因此我们需要敲好几次“cd”命令才可以进入我们的工作目录。这显得很麻烦,其实我们可以利用系统的“服务”来这文件夹的右键菜单中直接加入一个在所选目录打开Shell的功能,而且不用借助任何第三方软件,只需要用系统自带的Automator应用即可。

阅读更多

利用iPhone基带发送短信息

在我的文章《初识iPhone基带通讯》中简单的介绍了如何利用iPhone基带进行通讯,接着我又写了《利用iPhone基带读写SIM卡联系人》,介绍了SIM卡数据读写的一些基带功能。下面我将进行关于iPhone基带的最后一篇介绍:《利用iPhone基带发送短信息》。阅读本文前,请先阅读一下之前的那两篇关于基带的介绍。

阅读更多

利用iPhone基带读写SIM卡联系人

《初识iPhone基带通讯》文章中,我们初步了解到了如何在iPhone中进行基带通讯,和基本的通讯方式(GSM网络AT指令),并介绍了一些比较简单AT指令。本文将进一步介绍如何利用iPhone基带读写手机SIM卡联系人。本文简要介绍一下SIM卡的一些常识,AT指令中中文字符的相关处理,并介绍如果读写SIM卡中的联系人数据。

阅读更多

初识iPhone基带通讯

基带(Baseband)是手机的通讯模块,它负责移动网络的调制与解调工作,它与手机核心通讯功能息息相关。iPhone中也有一个基带,越狱用户可能会经常听到这个名词,有锁的iPhone,如果基带不进行破解是没办法进行操作的。下面来介绍一下用iPhone基带进行通讯,本文需要手机越狱并具备足够的系统权限,建议在命令行下以root权限运行。未来会继续介绍利用基带进行SIM卡联系人和短信数据的导入导出,以及发短信等知识,敬请关注。

阅读更多

“#”的迷雾

在代码中使用Autolayout时,大家都会使用NSDictionaryOfVariableBindings这个宏,这个宏可以生成一个变量名到变量值映射的Dictionary。比如NSDictionaryOfVariableBindings(button1, button2)将会生成一个{ @"button1" = button1, @"button2 = button2 }的Dictionary。它是怎么做到的呢?我们来看看这个宏的定义:

1
#define NSDictionaryOfVariableBindings(...) _NSDictionaryOfVariableBindings(@"" # __VA_ARGS__, __VA_ARGS__, nil)

这个宏定义中有3个参数,后两个参数不难理解,但第一个参数中间有个#符号,语法上看起来比较怪异,这个是什么呢?以前在做越狱的mobilesubstrate开发时,其中定义的一堆宏频繁使用了这个符号,下面就来揭开#这个符号在宏定义中的迷雾。

1
2


阅读更多

使用CFStringTransform将汉字转换为拼音

之前做通讯录相关的一些App时,有一个比较常用的算法是将汉字转换成拼音。当时采用的做法是:将各个拼音段的首个汉字(按Unicode排序)做成两个数组,一个数组存拼音,另一个数组存拼音对应首个汉字的Unicode。如果要获取某个汉字的拼音,可以折半查找法找的对应拼音。最近无意间发现CFStringTransform这篇文章后,发现系统本身已经提供了一个这样的函数。

阅读更多

并发编程之GCD

《并发编程之Operation Queue》中讲了Cocoa并发编程中的Operation Queue,了解了Operation Queue是一个面向对象的并发编程接口,它支持并发数,线程优先级,任务优先级,任务依赖关系等多种配置,可以方便满足各种复杂的多任务处理场景。本篇将接着讲另一种并发编程机制 - GCD(Grand Central Dispatch)。iOS4.0中首度引入GCD,GCD是管理任务执行的一项技术,它使得我们对多任务处理变得更加方便和有效。它支持同步或异步任务处理,串行或并行的处理队列(Dispath Queue),非系统调用的信号量机制,定时任务处理,进程、文件或网络的监听任务等。这个庞大的任务处理技术大大减少了线程的管理工作,使基于任务的开发变得更加高效。

阅读更多