需要学习IOS开发,首先需要掌握的是ObjectC语言。由于我之前接触过多年的C/C++和Java,所以很多地方我只需要理解ObjectC和他们的不同即可。当然为了能够系统的学习,建议您还是仔细学习一遍ObjectC语言,我这里并不会讲述太多原理方面的内容,只会尽量将实际编码中需要注意的内容列出:
- 基本的关键字,类似于for/case/switch等等,大家都是差不多的;
- “@”标识符标识与标准C有区别的关键字,"[]"标识方法调用;
- import关键字取代了include,这样可以不需要很多的#ifdef宏定义;
- @autoreleasepool标识一个自动释放池,这样我们alloc出的对象无需我们自己release;
- 简单数据类型类似与int等在ObjectC中继续存在,只不过BOOL是大写,并且取值是YES/NO;
- 所有的对象类型变量定义都使用C中的指针类型定义法,例如:NSString *str,但是注意我们的变量指向的是内容,但是不能对指针进行操作;
- 和大部分的C系列语言不同,我们不是使用object.method()这样的方法来调用方法,而是使用[object method]方法;
- 如果方法返回值,那么我们使用result = [result method]的形式;
- 如果方法包含参数,那么我们使用result = [result method:arg1, arg2name: arg2value]的形式,其中arg2name是参数名(或者可以认为是形参),arg2value是参数值(可以认为是实参),Apple给的说法是这样代码更易读,但是对于我来说真是一点都不习惯,当然我们也可以使用C++或者Java的那种方法,但这种方法Apple不推荐。。。;
- 大部分创建对象(构造方法调用)使用如下形式:NSDate *date = [[NSDate alloc] init]的形式,其中alloc负责分配地址,init负责初始化;
- 关于Automatic Reference Counting(ARC):ARC是IOS 5中增加的能力,这是一个非常强大的能力,这样我们可以在初始化对象后不用再去关心对象释放的问题(和Java相似的垃圾回收机制,只不过是在编译器中添加代码实现,不是直接在源代码中添加),以前我们给对象分配内容并且使用结束后需要调用[object release]来释放空间,防止内存泄露(memory leaking),注意需要在工程建立时选择这个选项;
- 对于方法来说,如果是"+"标记的,表示是static方法;如果是"-"标记的,表示是实例方法(非静态方法);
- 对于类来说,有interface表示类的接口(类似于C中的头文件),implementation表示类的实现(类似于C中的C文件);
- 对于类和方法的定义,我们经常看到的是:
#import <Foundation/Foundation.h> @interface MyData : NSObject -(void)doNothing; @end
#import "MyData.h" @implementation MyData -(void)doNothing { } @end
- 对属性的定义:
#import <Foundation/Foundation.h> @interface MyData : NSObject @property int myId; // nonatomic非原子性访问,不加同步,多线程并发访问会提高性能。 // strong相当于是一个深拷贝的操作 @property (nonatomic, strong)NSString *name; -(void)doNothing; @end
#import "MyData.h" @implementation MyData -(void)doNothing { _name = [[NSString alloc] initWithFormat:@"aaa"]; } @end
注意以上的_name属性需要这样使用。如果你需要使用方法你可以直接[self setName:xxxx]。
- 以上是基本的语法,后续可能会继续补充。
总体来说,ObjectC对于有C/C++/Java开发经验的程序员(like me)来说,学习的曲线远比C/C++到Java大,而且我认为ObjectC也不是我期待的那样简单和美好,Anyway,存在即是合理,更何况我们需要用来实现自己的梦想,Let's go to the next!