注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zzj的博客

风起风过

 
 
 

日志

 
 

Mac下开发第一季  

2010-06-13 11:57:34|  分类: 个人日记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这个学期选修了学校的“苹果软件开发”这门课程,这门课程是从我们这一届才开设的。我想开设的原因就是因为学校在Mac, iPhone这一块上的成绩的确很强所以才开设这门课程,想把这个优势继续发扬的吧。

话说选上这门课后,第一个作业是用NIb做一个摄氏和华氏温度的转换器,也就一个输入框,一个输出框,功能很简单,不过做了之后就觉得,算的上是入门了,也起码知道了图形界面是怎么一回事,怎么去做。然后第二个作业是让我们用尽量多的App Controller 来随便做一个东西出来。我们小组这次做的是一个多功能的计算器——包括了一般的计算和计算某数列的第N个元素,其中N是由用户从textField输入或是用slider拖动得到的一个值(其实slider这个东西完全没有必要,只是这次作业的要求是用尽量多的App Controller,所以我们才“多此一举”)。接下来,就是传说中期末项目了,每个小组做一个App出来,项目主题自己拟定。

我们小组的组长是个vim控,于是他一句话:我们做个山寨的vim吧!然后就一呼四应了。话说我是用emacs的,不过mac下的文字输入框都支持emacs的一些常用快捷键的,所以也就没有我们家emacs什么事了。

话说要做出来个vim总是要有个学习的例子吧,然后我们就搞了vim的cocoa源代码开始看……看着看着,傻了……然后在看的过程中,又得知了一个mac下被称为“神器”的编辑器——TextMate。下载了这个编辑器后,我们才觉得,我们两个人用的vim和emacs是多么老早以前的古董了。TextMate把图形这个现在出来很流行的东东运用的非常好,非常易用,而且一些设计对我们的这个伪vim也有很大的启发。最后,我们把功能定了出来,有以下几个:
1.vim的快捷键的支持
2.可以调出终端(毕竟,mac下的那是一个bash,不能浪费了)
3.一键编译——这个项目我们只是做了C++的,因为就只是想用来做题用的,而不是写工程
4.语法高亮,缩进
5.行号(这个的麻烦程度堪比高亮,最后被阉掉了)
我做的是语法高亮这里,这个留到最后面说,因为这个实在太烦了。小杰杰做的是其他的所有功能(- -)。
vim快捷键的实现:
既然是个编辑器,那么就要实时跟踪我们到底在输入框(TextView)中做了什么,然后我们想出来的一个方法就是重载keyDown函数,每按一次按键,那么就去把我们相关的所有的涉及的函数跑一遍(听起来很恐怖吧,更恐怖还在后面)。这样做有一个好处,就是可以很容易的捕获现在的键盘输入的是个什么东西。比如我们要做的那个vim快捷键实现,对vim有一点了解的人都知道vim下的操作有两个模式:一个是输入模式,一个命令模式。输入模式中按ESC键进入命令模式,命令模式中 i 键进入输入模式。哦,还有一个按:进入输入命令模式……等等这些需要判断的键盘动作在我们重载了 keyDonw 后就变得很简单,每输入一个字符那我们就对其进行判断,然后进入相应的函数。
调出终端和一键编译:
这个用到很神奇的被我们大为称道的 App Script 这个真的是个很神奇的东东……或者说所有的各种脚本语言都很强大,很神奇。既然说到了语言,那么就多说一点。Cocoa这个东西呢,看过一篇文章中写到的是越升级越像 Small Talk,或者说,越来越还原为 Small Talk。它本来就是从 Small Talk变过来的。我用的是emacs,它的配置文件是用 Lisp语言写的,而看的另外一篇文章中又说到:当今世界上没有XML语言这个世界就末日了,下面跟着一句话就是XML就是当年的LISP……上面提到的ST,LISP,XML我都没学过,就是看过一些文章,有些感触,在这里提一下。
语法高亮:
高亮这个东西,说白了就是字符串的分析。按照我们的设计思路,每截获一个按键动作,那么我就要进入我的高亮函数来对当前光标位置与对应的光标所在那个词进行判断,看是否需要高亮。我把关键字都存在了 *.plist 当中(噢,cocoa 当中,plist是用xml写的,不过cocoa很好把它抽象出来了,进行编辑的时候就像表格一样)。高亮关键字就这样解决了,麻烦的地方是对注释和引用的高亮。初始化这些大段的高亮是很简单的,一旦输入了 //  /*  '   "  这些字符后,我就向后搜索,看能不能找到与之匹配的结束符。但是做起来很恼人的是当我们用 backspace(退格键) 这个键删除了这些标记字符后,还要对文档再进行操作,恢复正常的高亮显示。现在的做法是把每捕获到退格键,那么就从删掉的位置向后搜索,对其进行重新高亮。
不过在高亮这里有个很严重的问题就是,我们的代码长度一上来,每到了要重新高亮,也就是按下了退格键的时候,我们的那个重新高亮的速度异常让人难以忍受。而我们试了vim, TextMate,这些编辑器的时候,那叫一个速度啊。于是我们就在想更好的数据结构——比如树,以加快搜索;还可以存下来已经高亮的 range,那每次就可以只改变 range 的颜色就好了……不过,我们已经放弃这些改变了。如果看到这篇文章的朋友有更好的想法的话,可以留言交流,这个小编辑器我们是还会完善的,毕竟,最初的打算是给自己用的。

做出来之后,就是测试,结果发现了一堆bug,弄的我们很是受挫。不过,还是把它给 release了。

我们做苹果开发是在自己电脑上装的系统,都不是“正统”,原来开这个博客是想写一篇文章总结一下装mac系统的各种心得的,从虚拟机到装系统,不过后来还是由于世博会志愿者啊懒啊等种种原因搁浅了。至于这个项目的成品——CoderMate(连名字都是山寨TextMate的),一个与TextMate何其相像的东东,估计我们不怎么会用到,毕竟我们一般是在Linux下的,也就是说,我在写这篇文章的时候,就截不到我们那个编辑器的图了。等再到mac下的时候再把图片传到相册里。

下面说一些总结:
关于学习一个新知识,我们这次的学习cocoa编程的方法是一下子就上手,然后遇到不明白的再上网查啊,翻书找啊。虽然说最后没有把我们那两本书看完,不过这样一来学习进度就快了很多,如果有着急的有需要,这个方法是个不错的选择。不过有个不好的地方就是脑子里对于这种语言的了解不是很系统。至于以后想参加苹果开发的比赛还是要好好看几本书的。

好了,就是这样。
P.S.:baidu的空间输入框怎么这么小啊,都看不到几行。
  评论这张
 
阅读(127)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017