Objective C的基本语法和C++都是一样的,本来也是,都是从C演变来的,但是到了类这块就开始不一样了,反正我第一次看到,就是觉得特别看不顺眼,C++用太久了哈!
下面是一个类在Obj C下的定义格式,这里如果要定义一个类就必须以@interface ClassName开始,以@end为结束,原因似乎是说Objective-C都是以关键字@,作为编译路径的。
@interface ClassName : ItsSuperclass
{ instance variable declarations } method declarations @end
- 这里ClassName就是类名,ItsSuperclass,就是继承类。还有就是,类的成员变量都定义在大括号内,而方法是放在大括号外面的,这个是和C++很不相同的。变量的定义基本不变,和C++一样也有三种访问权限,不过要写成@public,@protected 和@private.
- 最大不同是方法的定义,除了要放到括号外,还必须要在方法定义前加这个'-'符号,说明是定义方法而不是函数。然后在'-'后面紧跟返回类型,要用括号括起来,下来是名字,然后奇怪的地方又出来了,这里方法的参数是在methodName:后面用(Type) argument的方式表示出来,一个‘:'代表一个参数
-(Type)methodName:(Type) argument
- 定义完了类之后,就要实现类的具体方法,首先要写@implementation ClassName,然后用和在定义中定义方法的格式一样,在大括号里实现方法的具体代码。
@implementation ClassName
-(Type)methodName:(Type) argument{
//statement
}
@end
- 初始对象,这里也和C++有些不同,方式也有些古怪,当我们要new一个新的指针对象时,格式如下
[receiver message:arguments],其中receiver可以是一个对象或者类。
在Obj-C中方法要被分为两类来看,一类是给对象定义的叫 instance method(实例方法),另一类就是为类定义的叫做class method(类方法) 。
- ClassName *object=[ClassName new];看到new就知道是在分配内存,但是在这里,还有一层意思是说给这个新的对象发送一个init的消息,zero所有的的成员变量。
- 在对象调用方法的时候也同C++有区别,比如[object ClassMethod],等同于C++中的object->ClassMedthod,称之为发送消息给对象