分类 果粉+G粉 下的文章

iOS sqlite控件 Sqlight

记:上一篇文章介绍了Kache这个缓存控件,可以用来配合这次iCloud升级,这篇是关于一个sqlite的封装,Sqlight,一个很轻量级的封装,也是为了配合iCloud。模仿了PHP mysql扩展PDO的一些做法。把数据库操作封装成方法,通过NSDictionary和NSArray传递参数。源码:http://jiajun.org/g/Sqlight.zip

Sqlight真是没什么可介绍的,主要的常用方法有4个,select, update, insert和delete,还有一个create table在初始化时调用。用法示例在 Sqlite.h 文件的注释中。

简单介绍一下原理,Sqlight的数据文件是放在Documentation目录的,也就是说会被备份到iCloud。跟cache不同,我建议在数据库里存放一些比如,用户信息,登录状态等等。

以下把用法示例贴一下:

 

SqlightAdapter *sqlight = [[Sqlight alloc] initWithDatabase:@"test_database" AndTable:@"test_tb"];

if (nil == sqlight) {

sqlight = [[Sqlight alloc] initWithDatabase:@"test_database"];

 

[sqlight createTable:@"test_tb" Info:[NSArray arrayWithObjects:@"f1", @"f2", nil]];

sqlight.tableName = @"test_tb";

}

[sqlight insertData:[NSDictionary dictionaryWithObjectsAndKeys:

@"value1",@"f1",

@"value2",@"f2",

nil]];

// this is a wrong condition, there is no f0 field.

sqlight_result_t res = [sqlight selectFields:[NSArray arrayWithObjects:@"f1, f2", nil]

ByCondition:@"f0=?"

  Bind:[NSArray arrayWithObjects:@"value1", nil]]; 

NSLog(@"%d -- %@ -- %@", res.code, res.msg, res.data);// will out put 1 -- no such column: f0 -- ()

res = [sqlight selectFields:[NSArray arrayWithObjects:@"f1, f2", nil]

ByCondition:@"f1=?"

Bind:[NSArray arrayWithObjects:@"value1", nil]]; 

NSLog(@"%d -- %@", res.code, res.data);// will out put 101 -- ( value1, value2 )

[sqlight updateData:[NSDictionary dictionaryWithObjectsAndKeys:@"value_new", @"f1", nil]

ByCondition:@"f1=?"

  Bind:[NSArray arrayWithObjects:@"value1", nil]];

res = [sqlight selectFields:[NSArray arrayWithObjects:@"f1, f2", nil]

ByCondition:@"f1=?"

Bind:[NSArray arrayWithObjects:@"value1", nil]]; 

NSLog(@"%d -- %@", res.code, res.data); // will out put 101 -- ()


 

iOS缓存控件 Kache

记:昨天(Sep. 29)想必很多 iOS 开发者都收到Apple的邮件和苹果中国的工作人员的电话了,要求开发者升级应用,调整本地文件的存储位置,以适应即将发布在iOS5中启用的iCloud同步应用数据功能。恰好我这里有n久以前写的一个缓存控件(Kache的源码:http://jiajun.org/g/Kache.zip,现在再拿出来,希望在这次大规模的升级中,能给大家带来方便。

Kache 的基本思路是:用一个单例对象hold住整块内存,每次set都把数据set到这块内存里,get也从这里拿。在需要持久化的时候,例如程序退出之类的,调用一个saveToStorage方法,把这块内存持久化,存到iCloud文档中提到的Caches目录,这个目录是不会被iCloud备份的。在需要从本地存储载入时调用一个loadFromStorage方法,把整块内存load出来,照常使用。注意:Kache只能缓存 NSData, NSDictionary, NSArray, NSString等这些基本数据结构,不能缓存其他对象。

Kache提供两个基本功能:

1,普通缓存,允许设定有效时长,如果用户不指定被缓存数据的有效时长,则默认为86400秒,也就是一天过期。

2,缓存队列,Kache提供一个队列,用户可指定队列长度,默认为100,当新数据进入缓存队列导致队列长度超过100时,最先进入的数据会被删除。普通缓存不影响队列。

特殊需求:

之前提到,Kache使用的是一个单利hold住整块内存,那么一个单例中只允许有一个缓存队列。如果需要多个缓存队列,那么可以使用Kache提供的实例方法,开发者自己创建单例对象来hold住不同的内存。

基本用法:

用法非常简单,只要 #import "KCH.h"后,就可以按照 KCH.h 文件注释的例子来调用缓存了。

阅读源码:

Kache的源码非常简单,只有6个文件加1个KCH.h。

KCH.h基本上是一个README作用的文件。

KCHObject.h/KCHObject.m 定义了缓存的原子对象,这里记录了某个数据的过期时间和具体数据等内容。

KCHHolder.h/KCHHolder.m 定义了整个缓存的基本操作方法,包括对过期的处理,对队列的处理,持久化,重置等等。

Kache.h/Kache.m 是对KCHHolder的封装,提供了所有操作的实例/静态方法,以及对一直说到的单例的定义。

最后,是Kache的源码:http://jiajun.org/g/Kache.zip

从wwdc2011 keynote看apple的生态系统

去年wwdc 2010的余温还在,iphone4的热乎劲儿还没过,wwdc 2011就来了。乔布斯走上来就告诉大家,今儿咱们不聊硬件,聊聊软件。说实话,刚刚听到没有硬件发布的时候,心里还是有点小失望,但随着演讲进行,一个又一个的软件产品,不亚于新硬件带来的惊喜。三个主题,osx 10.7,ios5和iCloud,具体的内容不聊了,大家可以在视频里了解,说说看了这个keynote的一点感受。(视频地址:http://itunes.apple.com/us/podcast/apple-keynotes/id275834665

三两个月以前,就在朋友的air上体验了10.7,感受最深的还是“multi-touch”,配合各种手势,mission control和launchpad都显得很自然。个人感觉mission control和launchpad,甚至包括full screen app这些,都是早已存在的feature,只是在等待一个完美的入口。终于,multi-touch成熟了,这些功能可以一股脑的出来了。

说道multi-touch,必须提Lion里对scroll bar的弱化。之前,我们的mac trackpad也有双指滚动,但这个双指是对scroll bar的操作,也就是说双指向下,页面向上的这种反向操作,而10.7里弱化scroll bar以后,双指直接操作页面,跟之前的方向相反。开始上手,确实需要一段时间适应这个操作。

还有其他很多特性,包括keynote里提到的mail,都在向ios靠拢。从Lion各个新特性来看,触屏的影子越来越重,或许触屏macbook离我们不远了。触屏macbook带来的将不只是操作体验上的大幅提升,更重要的是没有了键盘依赖,mbp的移动性更好,我想今年发布的那73%笔记本用户比例,上升到90%都很正常。

这些年一直聊的很热的“移动”,似乎大家都关注在手机和平板上,看apple在Lion这个系统中的动作,接下来apple要把mac推进移动市场了。apple接下来一定又会告诉我们“it changes everything again”,移动领域不是只有phone和pad,notebook也要是移动领域的重要元素。几年前就推出了触屏电脑的ibm,hp这次很可能又要在这块领域被apple打的体无完肤了。

而近年来大热的ios,此次推出的ios 5,却让开发这们有点伤感了。新功能确实不少,但这些又酷又炫的新功能可是抢了不少第三方app开发者的饭碗。camera,twitter,reminders,notification还有iMessage,几乎涵盖了能想到的所有应用领域。要在这些领域里争一口饭吃,开发者们似乎就剩下“跨平台”这一跟稻草了。

虽说ios 5把很多开发者们的财路给堵了,但iCloud的发布,而且开发了api,绝对是给开发者们打开另外一扇窗,这时候我不由得想:Jobs还真是上帝啊!看iCloud的很多特性,以及超低成本,不得不怀疑ios 5中apple做的那些抢饭碗的事情是故意为之,故意要把开发者们赶到云应用的这块土地上。这块土地无疑是超级肥沃的,apple自己种不过来,只有借助第三方开发者的力量,一起耕耘,才能在这块肥沃的土地上获得丰收。说句题外话,ibm,intel还有oracle等等这些做云很长时间了,但似乎都不瘟不火,google的云也总是没有想期望中那样火爆起来,但我看apple这朵iCloud又要给这些公司上一课了。

说回来iCloud,apple自己做了文档,音乐,应用,通讯录等等一些基础的云应用。接下来基于这个云平台的应用可以衍生出更多好玩的东西,同步只是其中很小的一部分,我认为互动和分享将成为接下来云应用的一块主阵地。那种“情侣台灯”式的应用,一定很有市场。独立的ios开发者可以真的可以开始考虑这方面的东西了,似乎能感觉到当年app store刚出来时的那种新生力量,一年百万美元入帐的传说,可能要重演了。

单看keynote的三个段落,给大家带来的是各种各样的小惊喜,而把三个段落连起来却发现apple是在布局,一个网络生态系统。从i7的mbp到10寸最薄的air;有用来打电话的iPhone,还有更轻量的ipod touch;更大更休闲的ipad;甚至apple tv,在所有段位给消费者提供选择。让所有设备接入云,做好多apple设备体验,把所有用户圈到apple的这个系统里。让第三方开发者在需要的领域进行开发,帮助apple把可能性做大,把体验做到极致。这个系统建成,apple将成为一个王国,是前所未有的,ibm没有做到过,微软没有做到过,google没有做到过,没有任何人做到过,我想,apple可以做到。

苹果体验——上海,中国

昨天师傅婚礼,没来体验开业的盛况。恰好赶上周六晚上上海有事,所以急急忙忙赶到上海,周日闲下来,中午跑来浦东看看。自诩为apple developer和果粉的我,这种机会怎能错过。

走出地铁口,走上天桥就看到下沉广场那个大大的apple logo,新潮就小澎湃了一把。

走进体验店,wow!真的是wow!各种各样的mac,走到工作人员那边,问有没有什么区域比较适合开发者(这行动有点傻)~被告知,mac区有比较专业的设备,可以看看。

走到mac区,映入眼帘的就是若干mbp,各种型号,各种大小,我靠!!!眼都花了~~有点没出息,虽然每一款都玩过,但是看到这么多一起摆在那,还是有点脸红心跳。

角落里是iMac专区~直接跳过小尺寸,哈哈哈,6台27寸背靠背的摆在桌子上。。。有点台壮观了。。。当我走到桌子一端试图拍摄一下这个壮观的场面时。。。透过imac的通道,看到的是两台 mac pro。。。更加壮观了。。。

P.S. 此文写于mbp 17 core i7 雾面屏

我去玩别的了,17寸的mbp用起来确实比13的爽。。。

看Google与Apple的性格

最近转到无线部门,开始做移动互联网的东西,于是开始放更多的精力在这个方面。通过了解Android手机与iPhone的各项特性,以及google与apple在一些策略方面,感觉到两家公司都带有强烈的个性,而且这些个性通过他们的产品设计霸道的彰显出来。另外,上周听了google chrome全球推广技术总监和一位google资深工程师的分享,他们对于flash,html5等等这些技术的态度,与apple也是截然不同的。

如果用简单的话总结:google是一本启示录,而apple则是一个救世主。

对于google,现在炒的最热的莫过于android,各大手机厂商纷纷推出android版手机,android在手机市场上已经成为iPhone的一个有力竞争对手了。同时,apple也推出了异常强大的iOS4,被认为是对android 2.2的一次有力回击。

但我认为google android的本意绝非是在手机市场上与iphone分一杯羹,而apple也绝对不会惧怕android来蚕食他打造的高端智能手机市场。

android的成功不会出现在手机市场,或者说android不会成为智能手机市场上的老大。android的出现,是为了唤起人们在移动领域的创造欲望,并且提供给人们这个开源的android作为生产资料。在未来几年内,android系统将会出现在你家楼下的楼宇对讲,汽车(荣威已经用了),自动售货机,甚至一个键盘上。各种各样的场景,全面开花。人们在android的启示下,发挥自己的创造力,开始打造一个全新的世界,我们周围的各种设备开始变的智能,而且通过无处不在的互联网链接在一起,形成一个巨大的云。这是google布的局,把人们唤醒,带入一个新的移动互联网和智能移动设备的时代。

而我们看iPhone或者说apple的策略,完全不同。apple在把每一件产品做到极致,每一个细节做到极致,做到全世界没有任何人可以超越,甚至是几年以后的未来都无人可以超越。当apple发布一款产品,人们总会为之无与伦比的设计与体验所震惊,并无比期望拥有这样一款产品。用自己超过世界的智慧和工艺,打造一款款甚至领先未来的产品,并且告诉人们,你们现在就可以拥有他,这就是apple。apple的用户永远是用户,永远是臣服于apple的用户,他们的一举一动都是在apple的控制下的。

说过这两款手机(至少当前看来是手机)产品的对比,我们看对于新技术和旧技术的态度。

两家公司当然都是极力推崇html5这项新技术的,在这一点上二者似乎分歧不大。但对于固有的老技术,举一个最尖锐的例子:flash,二者的态度可谓天壤之别。

apple对于flash几乎可以用“痛恨”这个词来形容,Steve Jobs多次在公共场合,批评flash,号召广大开发这放弃使用flash。而且,apple的产品对flash也超级不友好,mobile safari干脆就不支持flash。

然而google,则对flash宽容许多,不断的更新自己对flash的支持,无论是移动平台还是pc平台。在鼓励开发者使用html5的同时,也建议开发者在某些场景继续使用flash。在上次分相中,google chrome全球推广技术总监说:我们希望开发者能多掌握一门技术,这样才会使你在不断发展的社会上不至于被淘汰。换言之,就是google希望开发者能够并用flash和html5,能在二者中做出智慧的选择。

不同的态度也看出,两家公司的性格差异,apple非常霸道的为人们规定好道路,你只需要走下去。而google则启示人们,并让人们自己去寻找,决定自己的路。

比较这么多,我想说的是,这两家公司在新互联网时代将成为世界上最具有实力的两家公司。我们不需要非得分出哪家公司的文化或性格更好,因为在互联网时代,这些性格都是必须的。他们将在不同的路上走下去,然而殊途同归,都将为互联网的进步做出卓越的贡献,并在过程中激烈的竞争着。

用苹果的手机是一种享受,而在生活中使用android。

同时作为果粉和G粉是纠结的,但也是幸福的!