OC和C的最大区别就是具有了面向对象的功能,那么说到面向对象,就不得不说类这个概念了,如果学过Java的话,那么对类和对象的概念就不陌生了,因为Java是非常纯正的面向对象设计语言。关于类和对象的概念,这里就不仔细介绍了,网上有各种解释。我们之间来开一下OC中如何定义一个类,如何实例化出一个对象等。
首先我们新建一个工程,系统会自动创建main.m文件的,这时候,我们右键项目,选择New File..
然后选择OS X中的Source,在选择Cocoa Class,点击下一步
点击下一步
这里填写以下类的名称,这个和Java中是类似的了,点击下一步:
我们可以看到,新建了一个Person类,但是这个和Java就有点区别了,一个类是有两部分构成的,一个是类的头文件Person.h(一般是在该文件中做定义工作的),还有一个是Person.m文件,这个一般是实现头文件中定义的内容。这个也是延续了C语言中的项目结构吧。一般头文件只负责定义功能,.c文件负责实现具体功能的。这里也是类似吧。
下面来看一下Person.h头文件中类的定义格式:
@interface
一般类的定义格式为:
@interface 类名:NSObject{
定义属性
}
定义方法
1、OC中任何一个类都是继承NSObject,这个和Java中的Object是一个概念的,所以这里需要导入
#import <Foundation/Foundation.h>
其实Java中的Object对象是在java.lang.*包中的,不过Java并不会导入这个包,因为Object类的类加载器决定的,不需要导入的.
2、这里的继承符号和C++中是一样的,使用冒号:
3、在{}类定义类的属性,关于这里所说的属性和Java中的属性不是一个概念了,OC中只要定义在{}中的字段就是类的属性,而Java中是有getXXX/setXXX的方法,才叫属性。同时也得注意,OC中类中定义的属性名是以下划线:"_"开头,为什么要这样做,就是为了区分后面的局部变量与其重名了,当然我们在Java中一般是以m开头,或者其他方式,Java中没有那么强的规范,但是OC中还是强烈建议用这种方式的,还有一点要注意,在定义设置方法的时候,一般样式是setXXX,但是在定义取值的方法的时候直接是XXX,而不是getXXX了,这个也是和Java有区别的,至于为什么这么做,因为get开头的方法已经有其他用处了,后面会说到。这里就注意一下就可以了。
4、在属性定义的后面就是简单的定义方法了
下面在来看一下如何定义方法:
OC中定义方法和Java语言有很大的不同,所以这里很难记住,如果不常用的话,看一下方法的定义格式:
方法说明 (返回类型) 方法名 : (参数类型)参数名称
一种是减号:"-",表示该方法是对象方法,就是必须用对象实例才能调用的
一种是加号:"+",表示该方法是类方法,就是可以用类直接调用的,不需要实例化对象的,类似于Java中的static方法
2、返回类型:这个就简单了,和Java语言很类似了
3、方法名:方法名和Java中就不太一样了,看个例子:
这个方法的方法名是
shopping: 是包含冒号的,再看个例子:
4、(参数类型)参数名称:这个和Java也是有很大的区别的,感觉像是和Java中定义的相反了,他用括号把类型括起来了。OC中的对象类型和Java中的使用不一样,OC中的对象类型相当于C中指针定义样式(类名 *),这点需要注意。
当然在类定义的结束地方使用@end关键字的
看完了类的定义,下面在来看一下类的具体实现了:
Person.m
在实现的源文件中,必须导入类的定义的头文件
#import "Person.h"
这样的一种形式,和C语言中的工程结构非常相似。然后就是对头文件中定义的一些方法的具体实现了,而且在实现文件中,我们可以访问类中定义的属性。其他的就没有什么难度了,就不在细说了,同样的类的结束标志:@end
类定义和实现都介绍完了,下面来看一下如何使用吧:
main.m
首先是指针类型的样式定义一个变量,然后是调用类的alloc方法,接着调用init方法,这里有点比较奇怪,我们在定义Person类的时候,没有定义alloc和init方法,这里为什么不报错呢?这个就和Java很相似了,因为OC中任何类都是集成NSObject类的,那么自然想到了这两个方法是NSObject定义的。而且我们可以看到alloc方法是类方法,init是对象方法
同时,OC中的方法调用方式:
对象方法:[对象变量 方法名 参数]
类方法:[类名 方法名 参数]
这里实例化一个对象和Java中有很大的区别的,Java中直接new一个就可以了。这里需要调用两个方法alloc和init
可以这么理解吧:alloc相当于给这个对象分配内存空间,init是调用这个类的构造方法,对属性和字段进行初始化操作
当然上面的实例化操作也可以变成两步:
对象方法的调用,设置名字:
多个参数的对象方法调用,同时设置名字和年龄
总结
好了,关于OC中类的定义以及实现,如何使用就介绍到这里了,我们在学习的过程中可以和一门面向对象语言相比较学习,这样可能会学习的快点。