iphone 开发学习笔记二

用于Mac OS 和 iphone 的开发环境主要是XCode 和 Interface Builder ,在XCode 3.0之前,XCode 和 Interface Builder是两个相对独立的应用,一个主要用来编写代码,一个主要用来设计用户界面,从XCode 4.0开始 Interface Builder被集成在XCode中。
再谈谈用于Mac OS 和 iphone 的开发的开发语言 Objective C,这里也不想比较Objective C和其它语言C#,Java的优劣点,不同的人有不同的观点。根据Apple的文档说 Objective C最大的一个特点是动态性能,Dynamic Message Dispacth, Dynamic Binding等等。
这里主要给以熟悉C++,Java,C#语言的开发人员一些提醒,Objective C也是一种面向对象的编程语言,但是它和它的堂兄C++很不相同,更大程序上更象C语言。
1. Objective C仍然大量使用指针,而且很多情况下需要手工管理内存。尽管Mac OS上提供了 Garbage collector, 但在iphone不支持,即使以后支持Garbage collector,Apple 仍然建议使用手机管理内存,理由是更有效。这一点可能对于以前用Java,C#等具有自动内存管理的人可能不同意,毕竟手动管理内存是一个繁琐并且容易造成内存泄露。而硬件功能的越来越强大,完全可以弥补自动内存管理带来的效率问题。
2. Objective C严格意义上讲没有Constructor,但习惯上将以init开头的方法(消息)作为构造函数。dealloc 为析构函数。用于释放内存(常常用于释放类变量等)。
3. Objective C 的方法称为消息,这也是一个Objective C 一个显著特证,如果你看到一个代码中有类似
   [object message] 的代码,基本上可以判断这是一个Objective C代码。
   同样的代码在Java 中
       int age= person.getAge();
   而在Objective C 中
       NSInteger age=[person getAge];
   如果带参数,开始更不太习惯Objective C的语法:-)。
4. Objective C 中没有Namespace 的概念,为避免命名冲突,一般使用前缀,比如 NSString, NS为前缀。可以使用功能或是公司名缩写作为前缀。
5. 对于代码的注释,Objective C 一般还是使用Docxgen来生成代码的文档。
6. Cocoa 和 Cocoa Touch 中提供了Foundation Framework, AppKit, UIKit 接口等使用了Objective C 面向对象的对象接口,但相当一部分API依然是使用C接口,比如Quatz 二维图形库。又比如我打算在Objectivc C中找类似Java 库中 Math类,找了好一会儿没找到,Google 一下,居然还在math.h 和10年前用C 一样 :-)
最后借用Star trek voyager中一句台词“When in Colletive,adapt”,如果要开发iphone应用或是Mac 应用,就要适应Objective C ,时间长了就习惯了。而且基本上凡是Java中有的面向对象的概念 ,Objective C也支持,只是以不同的方式来实现的。
Apple的文档和教程写得非常好,这也可以弥补一些开发环境上的不便之处。