类的创建:
与Java不同的是,OC创建一个类需要两个文件(.h和.m文件)
1> xxx.h:声明文件。用于声明成员变量和方法。关键字@interface和@end成对使用。
声明文件只是声明该类里成员变量和方法的格式(返回值类型,参数类型等),并不会实现它们。
在OC中继承用冒号表示,所有类都是继承于NSObject的,所以Sudent:NSObject。(这是和Java不同的,Java中所有类都继承于Object,但不用每定义一个类都写明继承关系,所有类都是默认继承于Object类的)。
Student.h文件:
@interface Student : NSObject NSString * name; int age; - (NSString *)name; -(void)setName:(NSString *)name; -(int)age; -(void)setAge:(int)age; @end
2> xxx.m:实现文件。用于实现 .h 文件中声明的方法。关键字@implementation和@end成对使用。
注意:
在C中,包含预处理指令是#include<xxx>或#include"xxx",#include包含指令有个缺陷就是不会判断该文件是否已经被引入类要包含的文件,很有可能造成重复包含而出错,为了避免此问题,我们通常采用条件编译的方法引入文件,很麻烦。
OC中的包含预处理指令是#import<xxx>或#import"xxx",它有个优势就是可以自动判断要包含的文件是否已被引入,若没有它才引入,很方便。
方法的创建:
.h 声明文件只定义方法的格式。并不去实现方法体。
方法 - (void)setAge: (int)age; 表示定义一个动态方法,返回值为void型,方法名是setAge:,参数类型为int型,参数名为age。
注意:在OC中
“-”:动态方法(对象的方法); “+”:静态方法(类的方法)。
一个参数一个冒号,方法名包括冒号(方法名为setAge:)。
在 .h 文件中定义的方法默认都是public类型的,不能更改。若要定义私有方法,则应该直接在 .m 文件定义并实现。
OC定义方法时,返回值类型和参数类型都必须放在括号()里。
定义成员变量:
成员变量的作用域有3种:
@public 全局都可访问;
@protected 本类和子类可访问;
@private 只有本类可以访问。
在 .h 文件中声明的成员变量默认都是@protected型的。
注意:成员变量是声明在 .h 文件中的{}内部的。也可以说声明成员变量时必须用{}包住!
创建对象:
在Java中,创建一个对象我们是通过new Student()创建的,比如
Student stu = new Student();
这句代码其实做了两件事:
1.先在内存中为该对象分配了一块存储空间。
2.调用Student的构造方法进行初始化。
同样的,OC中的类创建一个对象也是这两个步骤哦:
Student * stu = [Student alloc]; stu = [stu init];
首先,Student类调用静态方法alloc在内存中开辟一块存储空间。
然后,把开辟出的这块内存地址赋给指针变量stu。(OC中所有的对象都是指针变量。真正的对象是那块开辟的内存,而stu只是指向它的指针,或者说引用)。
最后,调用stu的构造方法init初始化stu对象,并把初始化了的对象再次赋给stu(返回值为该对象)。
注意:
OC没有垃圾回收机制,所以创建的对象要自己手动销毁。
[stu release];