小议iPhone OS 3.0

今天凌晨,苹果宣布了iPhone OS 3.0 。上午起来看了视频,又翻了翻文档。从开发者的角度,说说我比较感兴趣的几个更新。 Apple Push Notification Service 一直被当作后台运行程序的替代品。仍然不能有后台运行程序,解释的也很清楚了,是耗电量和待机时间不允许。但可以通过Push来唤醒应用程序。这种方式的特点是无触发不执行,执行是被动的。虽然不可能100%解决所有后台运行程序的需求,但也算提供了一种比较通用的模式。 基本原理如下图所示: 先将消息推送给Apple的APNS,由它转发到相应的iPhone上,再由iPhone OS通知到相应的程序。 可以看到,所有的消息都不是通过网络直接发送到iPhone,而是通过苹果的APNS服务转发的。这将对APNS服务有很高的要求。这也是苹果一再推迟这一功能的原因。以往年苹果网络服务的经验来看,这个服务在推出以后也许要经过一段时间才会稳定。希望苹果这次是有备而来吧。 Accessory Support 我个人认为这个功能是这次升级的一个亮点,有极大的想像空间。附属外设可以通过30-pin连接头或者蓝牙接入。我大概看了下文档,和我想像的有些出入的地方是,附属设备必须预先支持iPhone,即使用蓝牙接入方式也一样。iPhone OS 3并没有象Mac OS X 10那样,提供一个完全的蓝牙API,而是做了更高层次的封装,只有符合协议(技术层协议)的设备才能接入。想通过iPhone OS 3直接读取Wii Balance Board 中的数据目前还不可行。 In App Purchase Support 商业模式上的扩展。SDK中新加入了Store Kit 。苹果还是挺狡猾的。这个事情,它不做,总有人会做,与其让别人做,不如自己先做了,还能再收个30%。对于最终用户,直接使用iTunes帐号付款也比再引入一个付款方式要简便,也许不少应用不得不因此屈尊交这笔苹果税了。 Peer to Peer Support 这一功能是以Game Kit的方式加入的,不过苹果一再声明完全可以用在非游戏的应用上。这一功能建立在蓝牙之上的,但同样做了封装,应用仍然无法直接和蓝牙接口打交道。连接服务以session的方式维护,一个应用可以这个P2P网络中扮演三种角色,server, client, 或者peer(server+client)。两个设备之间只能有一条蓝牙连接,但是在这一个连接上可以支持多个sessions的服务。传输内容并不受限制,可以自己定义。 Core Data 其实我们早就可以在iPhone中使用SQLite,不过到iPhone OS 3,才有了类似Mac OS X中的Core Data 。这意味着,对开发者来说,使用SQLite的门槛降低了。其他好像也没什么了。

我的妈妈

我的妈妈,吴维备,生于1932年10月16日。姥姥袁季兰怀着她七个月的时候,去苏州开会,下台阶不小心跌了一跤,引起早产,在苏州博习医院生下妈妈。 幼年和少年,刚好是抗日战争,随家人辗转于松江、浙江东阳和苏州等地。影响最深刻的是松江,住在乐恩堂附近。高中就读于苏州景海女中,因为喜欢画画,希望读建筑专业,但在老师影响下,毕业后考入东吴大学物理系。经人介绍,认识了当时在东吴附中读书的父亲。 东吴大学当时仍属私立大学,收费较高,刚好北方的大学来南方招收插班生,妈妈分别考取了一所东北的大学的建筑系和燕京大学物理系。当时东北仍被认为是“关外”,又因为我的姥爷和三舅一家在北京,最终在东吴大学上了一年后,转入燕京大学物理系。后来合并到北京大学物理系。 1953年,妈妈毕业后被分配到中央人民政府地质部,在北京化验室做光谱分析。1955年9月,接到人事部门通知,要调动到在乌鲁木齐的第13地质大队,一个中苏混合队,急需光谱分析人员。最初选定的是另一个男生,但那个男生推说健康问题不愿意去,才找到她。妈妈认为是工作需要,又符合她去野外工作的心愿,欣然答应。告别家人,两天后出发。乘火车只能到甘肃武威,又倒了两次卡车才到乌鲁木齐,全程花了17天。据妈妈说,一路是唱着歌去的。 1957年左右,让知识分子给组织提意见,妈妈从不会圆滑处事,又缺乏政治斗争经验,直抒己见,马上被打为右派。降薪,遭批斗,蹲牛棚,接受劳动改造。父亲也遭受株连,被下放。不明真相的邻居把屎拉在家门口。哥哥生日吹蜡烛被人看见,也被写成大字报,说是在家里搞资产阶级仪式。1976年文化大革命结束,妈妈直到1980年才平反。1984年才有人敢做她的入党介绍人。 妈妈一直从事光谱分析工作。我很小就熟悉光谱分析的流程,认识镭的谱线,对元素周期表有特殊感情。妈妈平反后被评为高级工程师,后来又任新疆地矿局实验室总工程师,本可以工作到60岁,但妈妈执意认为应该让给更年轻的人,55岁就开始申请退休,被再三挽留,最终在1989年获得批准。退休后作为有特殊贡献的科技人员享受国务院津贴。 妈妈最喜欢做三件事,读书、音乐和孩子。在读书上,妈妈有自己的理解,她不喜欢《围城》,认为太过刻薄,但我拿回家的村上春树的书却全都看过,同意村上是个很地道的人。妈妈出身于教会家庭,虽然成年后不再信教,仍会唱赞美诗,受少年时期教育影响,喜欢美国民歌,但对各种曲调优美的新歌也不拒绝,常常跟着年轻人学唱新歌,在她的外孙女考上大学的庆祝聚会上,七十多岁的妈妈以一曲周杰伦的《蜗牛》惊倒四座。妈妈喜欢小孩子,会讲故事,会唱儿歌,会做手工,会带着孩子做各种她编出来的游戏。无论是我们,还是她的孙子辈,都很喜欢和她在一起。 妈妈对于教育,除了要求我们做一个正直的人,没有太多的要求。对我们的功课或者考试能得第几名并不太在乎。从来不要求我们做没有兴趣做的事情,遇到问题也总是尊重我们的想法。我高三的时候,妈妈看到电视里演成龙的《醉拳》,知道我喜欢,会专门叫我去看。也是高三,有段时间我的几个朋友常常晚上找我出去玩,妈妈有些担心,和我谈过后,在门上贴了个纸条,上面写”boys, you are welcome on the weekend”,让我影响深刻。 妈妈最厌恶的事情是不讲真话。诚实是妈妈最简单的处事原则,她为此做了二十多年的右派,也没有改变过一点。妈妈最害怕的事情是麻烦别人,从来不会和别人争什么东西,而如果别人帮助了她,那怕理所当然,也会感谢对方。 2009年3月4日,妈妈被折磨了她一年多的肺癌带走了。临走前,妈妈一直在谢谢周围每个人,下呼吸机的时候,还在谢谢帮她拿下面罩的护士,然后就慢慢闭上了眼睛。妈妈就是这样,无论这个世界是不是真得值得留恋,心怀感激的走了。

iPhone开发内存管理

开发iPhone 应用程序并不难,基本上就是三个词 – “memory, memory, memory” 。iPhone OS 对内存的要求很严格,有memory leak ,杀掉; 内存使用超限额,杀掉。一个经过测试的程序,在使用过程中90%以上的崩溃都是内存问题造成的。在这里简单总结一下Object-C 内存管理。 基本概念 Object-C 的内存管理基于引用计数(Reference Count)这种非常常用的技术。简单讲,如果要使用一个对象,并希望确保在使用期间对象不被释放,需要通过函数调用来取得“所有权”,使用结束后再调用函数释放“所有权”。“所有权”的获得和释放,对应引用计数的增加和减少,为正数时代表对象还有引用,为零时代表可以释放。 函数 获得所有权的函数包括 alloc – 创建对象是调用alloc,为对象分配内存,对象引用计数加一。 copy – 拷贝一个对象,返回新对象,引用计数加一。 retain – 引用计数加一,获得对象的所有权。 另外,名字中带有alloc, copy, retain 字串的函数也都认为会为引用计数加一。 释放所有权的函数包括 release – 引用计数减一,释放所有权。如果引用计数减到零,对象会被释放。 autorelease – 在未来某个时机释放。下面具体解释。 autorelease 在某些情况下,并不想取得所有权,又不希望对象被释放。例如在一个函数中生成了一个新对象并返回,函数本身并不希望取得所有权,因为取得后再没有机会释放(除非创造出新的调用规则,而调用规则是一切混乱的开始),又不可能在函数内释放,可以借助autorelease 。所谓autorelease , 可以理解为把所有权交给一个外在的系统(这个系统实际上叫autorelease pool),由它来管理该对象的释放。通常认为交给 autorelease 的对象在当前event loop 中都是有效的。也可以自己创建NSAutoreleasePool 来控制autorelease的过程。 据苹果的人说,autorelease效率不高,所以能自己release的地方,尽量自己release,不要随便交给autorelease来处理。 规则 引用计数系统有自己的引用规则,遵守规则就可以少出错: 获得所有权的函数要和释放所有权的函数一一对应。 保证只有带alloc, Read more about iPhone开发内存管理[…]