Doom 的呐喊

Crying in the Day of Doom

RPN Calculator for iPhone

从拿到 iPhone 的第一天起,我就在不断地寻找好用的 RPN 计算器。我的要求是

  1. 类似 Emacs Calc 的进栈出栈方式
  2. 无限大的堆栈
  3. 要牛逼

iPhone RPN Icon

我一直使用的都是一个 HP i41CX 模拟器。它基本符合第一条,但是不符合第二条:它的堆栈只有四层,而且最顶层还就是你正在输入的这个。不过它非常非常得符合第三条,看看这个计算器的像板砖一样的手册就知道了。这个计算器也有一些不便,它实在是太复杂了。比如他默认的键盘配置上没有切换弧度和角度的键。键绑定是可以设的,但是我一直没有搞明白怎么设…  同样因为这个原因,我一直不知道怎么算双曲三角函数。其他的 RPN 计算器要不就是操作方式诡异,要不就是功能太少。所以昨天我终于决定自己写一个计算器。

奋斗了两天以后把四则运算都搞定了… -_-  在 iPhone 上开发程序还是很方便的,和在 Mac 上差不多,熟练了以后写界面用不了太多的时间,而且 Interface Builder 做 prototyping 也非常得爽。我的时间主要都浪费在用 UITableView 显示一个堆栈上。UITableView 就是一个和菜单差不多的可选择的列表,几乎每一个 iPhone 程序里都能看到。但是这个东西必须要有一个符合某种特定协议的数据源…  我曾经一度都想自己用 label 和 UIScrollView 实现一个这种列表了…  不过最后搞定以后发现这个东西还是挺爽的,并且附赠动画效果~~

在 iPhone 上开发程序需要花 $99 买一个许可证。… … …… 噢,不对,说错了,是苹果声称你需要买一个,实际上你不需要。免费开发程序的代价就是开发出来的程序只能在 jailbreak 过的 iPhone 上运行。当然这其实没什么,因为各种迹象表明,没有 jailbreak 过的 iPhone 的使用价值其实就和一个板砖差不多。默认情况下,如果你没买这个许可证,Xcode 是不会让你把程序往 iPhone 上传的,只能在模拟器里运行。要想在 iPhone 里运行,

  1. 当然要先 jailbreak
  2. 照着 Compiling 一节
  3. Replacing codesign with ldid,这一节貌似没什么用,我从来没有成功的运行过 ldid,不过我还是做了。
  4. 给 iPhone 装 AppSync 补丁。很多 Cydia 源里都有,比如 hackulo.us 源。
  5. 编译时使用自己生成的那个许可证。

关于调试,在开始使用 Linux 之后,我就再也没有使用过任何调试器,只使用 printf(及各种语言里的等效的函数)。Objective-c 里是有 printf 的,但是比较方便的做法是使用 NSLog()。运行的时候在 Xcode 里选择 Run -> Console,可以看到输出。顺便提一下,Objective-c 的标准库还是很牛逼的,嗯,NSString, NSNumber, NSArray, …