小议Objective-C

来源:互联网 发布:mac如何连接局域网 编辑:程序博客网 时间:2024/05/16 07:48

      1年半前,我接触了obj-c这门语言,也第一次接触mac os下的编程。他的概念是基于smarttalk-80这门语言的,语法基于C。对有c/c++以及java编程经验的人来说,obj-c不难,概念几乎都是一一对应的,只是关键字不同罢了。网上关于objective-c的教程也很多。

      在学校里,我认为c/c++可以完成所有的事情。因为参与acm的时候大多数使用的是c,甚至基本不用c++面向对象的特性。当时在一直考虑,为什么要创造那么多编程语言。现在我觉得,编程语言的诞生是离不开编程需求的变化的,也跑不开语言开发者程序思维的框架,更离不开程序员的个性。

      obj-c也是如此,他的基本概念,内存管理方式,动态类型特征等等,都似曾相识。好比水果拼盘。路人甲,乙分别选用了一些水果做了水果拼盘。有些水果是一样的,有些水果虽然不同但是味道差不多。但是最终目的都是做出一个水果拼盘让大家吃。编程语言也一样,各家之言罢了。每种语言都有其局限性和优势,他们为了解决一类问题而诞生,也伴随着一部分缺陷。

      翻开任何一本obj-c的教程书,讲类型,讲方法,讲关键字,讲面向对象,说道面向对象,会讲到协议(protocal),分类(category)以及posing(我不清楚这个词该怎么翻译,伪装么?的创作者Brad J. Cox不喜欢c++的多继承,所以他选择了protocal,一种类似java的interface一样的东西。为了减少不必要的继承,category被添加到了obj-c。为了提高多态性,同时避免强制转换,posing也被引入了。完全是一种和c++对着干的感觉。obj-c的这种方式好么?也不尽然,相信递交的应用程序被苹果因为use undocumented api打回来的同志们应该很痛恨这种运行时检测,编译时只报个warning的情况吧。这种private api竟然那么轻松和不经意间就能被使用了,换成c/c++甚至java,不改个头文件恐怕不成吧。改了头文件的话,多少自己也知道这是刻意不让你使用的吧。

      在2年左右的时间内,凭借着iphone,objective-c在Tiobe的排名从50多上升到了12。ratings也从0.1不到上升到了1.7779%(截至2010年2月),相信这个数字还会继续增长(ps,google的go语言初出茅庐已经排名13,紧挨着objective-c,可见互联网和google的力量)而造成这种大幅增长的原因,只是因为iphone以及即将推出的ipad。并且,也不是所有程序都用纯objective-c编写的。为了重用代码,与c/c++混搭的情况还是很多的,也正是这种情况,让objective-c比起smarttalk而言,门槛低了不少。

      objective-c要求对象都继承NSObject或者是他的子类,这点上ORGE这款开源图形库的做法与之相似。所有的对象都保存了一个count,当对象的引用增加是+1,减少时-1,当0的时候就释放该对象,很好的想法。

       现在都讲究个性,如今个性都体现在衣食住行,谈吐外表中。程序界的个性,体验在编程思想中,有不满意的,有独特想法的,程序中体验出来。当一门语言不能满足的你个性的时候,创造一门新的语言。而objective-c,我觉得正是一种个性的体现。

原创粉丝点击