十二 30

第一章

     Xcode需要运行在基于Intel的Leopard之后的Mac OS之上
     Cocoa Touch使用Objective-C 2.0
     编写iPhone应用程序的特别之处
          只有一个正在运行的程序
          只有一个窗口
          访问受限     沙盒
          有限的响应时间     按下Home后5秒内没完成清理,将被强制退出
          有限的屏幕大小     480*320
          有限的系统资源     内存不足时,应用程序会收到通知。如果不能及时释放内存,可能被强制退出
          缺少Cocoa工具     不支持垃圾收集
          新属性     定位、摄像、图片库和加速计
     本书内容
          2 Interface Builder基础
          3 基础交互
          4 基本控件
          5 方向感应
          6 多视图
          7 工具栏
          8 TableView
          9 分层列表
          10 应用程序设置
          11 数据管理     SQLite
          12 绘图     Quartz和OpenGL ES
          13 多点触摸
          14 Core Location
          15 加速计
          16 摄像头和图片库
          17 I18n

第二章
     Project的目录结构,仅为逻辑结构
          Classes     存放大部分代码
          Other Sources     其他源代码
               .pch     预编译的头文件 precompiled header
               main.m     main函数,通常不需修改
          Resources     非代码文件,图标、图像、音频、视频文本
               .xib     Interface Builder用到的信息
               Info.plist     应用程序相关属性列表
               MainWindow.xib     主Interface Builder文件
          Frameworks     框架和库
          Products     编译生成的应用程序
     Interface Builder
          支持.nib(旧)和.xib(新)两种格式,统称nib或nib文件
     nib文件的构成
          File’s Owner     所有nib文件的第一个图标,表示加载nib文件的对象,控制器类是与之同名的nib文件的Owner
          First Responder     用户当前正在与之交互的对象,随用户与界面的交互而变化
          其他图标表示将在nib文件加载时创建的对象实例
     图标
          png     57*57
          放到Resources文件夹中
          在Info.plist中设置
     仿真器
          删除~/Library/Application Support/iPhone Simulator以清空主屏幕图标

第三章
     MVC模型
          M     Objective-C类
          V     Interface Builder
          C     NSObject,更多的是通用控制器类,如UIViewController
     控制器
          控制器类试用一种特殊的实例变量(输出口,outlet)来引用nib中的对象
          输出口可以看成是指向nib中的对象的指针
          可以通过绑定操作方法,设置nib文件的界面对象触发控制类中的特殊方法
     输出口
          IBOutlet     一个没有内容的宏,唯一作用是告诉Interface Builder此实例变量将被连接到nib中的对象
     操作
          IBAction     告诉Interface Builder,此方法是一个操作,且可以被某控件触发
          - (IBAction)doSomething:(id) sender;
     Outlet与Action的声明
          @property (retain, nonatomic) IBOutlet UILabel *statusText;
          retain 对象在内存中驻留
          nonatomic 无须支持多线程?
          myVar = [someObj foo] 等价于 myVar = someObj.foo
          someObj.foo = myVar 等价于 [someObj setFoo:myVar]
     Outlet与Action的实现
          @synthesize statusText
          [statusText release] in dealloc(),照应retain
     应用程序委托
          每个iPhone应用程序有且仅有一个UIApplication实例,负责应用程序的运行循环以及处理各种应用程序级功能
     连接输出口
          Control+拖动,从File‘s Owner到相应的控件对象
     指定操作
          Touch Up Inside
          拖动,从Event到File‘s Owner
          

Tagged with:
19
Tagged with:
09

/private/var/mobile/Media/EBooks/

Tagged with:
03

找到了txt版本的天龙八部,准备放到手机上,但发现这个版本略有瑕疵。
可能是为了在固定宽度的显示器上显示的缘故,往往到了一定字数,文章就会折行。

萧峰道:“不行!”突然拍出一掌,击向木几,只听得劈拍一声响,木几碎成
数块,匕首随而跌落,凛然说道:“杀母大仇,岂可当作买卖交易?此仇能报便报,
如不能报,则我父子毕命于此便了。这等肮脏之事,岂是我萧氏父子所屑为?”

慕容博仰天大笑,朗声说道:“我素闻萧峰萧大侠才略盖世,识见非凡,殊不
知今日一见,竟虽个不明大义、徒逞意气的一勇之夫。嘿嘿,可笑啊可笑!”

萧峰知他是以言语相激,冷冷的道:“萧峰是英雄豪杰也罢,是凡夫俗子也罢,
总不能中你圈套,成为手中的杀人之刀。”

慕容博道:“食君之禄,忠君之事。你是大辽国这臣,欲只记得父母私仇,不
思尽忠报国,如何对得起大辽?”

萧峰蹭上一步,昂然说到:“你可曾见过边关之上、宋辽相互仇杀的惨状?可
曾见过宋人辽人妻离子散、家破人亡的情景?宋辽之间好容易罢兵数十年,倘若刀
兵再起,契丹铁骑侵入南朝,你可知将有多少宋人惨遭横死?多少辽人死于非命?”
他说到这里,想起当日雁门关外宋兵和辽兵相互打草谷的残酷情状,越说越响,又
道:“兵凶战危,世间岂有必胜之事?大宋兵多财足,只须有一二名将,率兵奋战,
大辽、吐蕃联手,未必便能取胜。咱们打一个血流成河,尸骨如山,欲让你慕容氏
来乘机兴复燕国,我对大辽尽忠报国,是在保土安民,而不是为了一己的荣华富贵,
因而杀人取地、建功立业。”

忽听得长窗外一个苍老的声音说道:“善哉,善哉!萧居士宅心仁厚,如此以
天下苍生为念,当真是菩萨心肠。”

这样的格式在640*480的屏幕上可能很好,但是在iPhone上看殊为不爽。
解决方法:

awk 'BEGIN{ while(getline){ if( $0 !~ /^$/ ) printf $0; else printf "\n" } }  END{printf "\n"}'  filename

找解决方法的过程中,发现了两个附加产品:

  1. 下载txt电子书的网站(不是论坛,无需注册,虽然广告很多)
  2. GNU的awk手册(比种种学习笔记要好得多)

曾尝试用sed,不果。

Update: 20090206
针对中文书,优化了一下

for f in *; do awk 'BEGIN{ while(getline){ if( $0 !~ /^[ \t\xa1]+/ ) printf $0; else printf "\r\n%s", $0 } }  END{printf "\n"}'  $f > $f.new; done

xA1A1是全角的\t

Tagged with:
preload preload preload