02.第一个OC语言类
在java语言中,创建一个类只需要一个文件,而在oc语言中,创建一个类需要两个文件.m文件和.h文件。
.h文件是声明类,用来声明成员变量和方法。用关键词@interface来修饰,以@end结尾。
.m文件是实现类,用来实现成员变量和方法,用关键词@implementation来修饰,以@end结尾。
方法:在oc语言中方法都需要用+或-来表明方法的类型。
+表示的是静态方法。
-表示的是动态方法。
.h文件中的所有方法都是public,不能更改。
成员变量:成员变量按作用域不同可以划分为:public protected private
所有的类最后都会继承NSobject.
Student.h文件
#Import <foundation/foundation.h> //该student类继承NSobject类,因此需要引用foundation框架下的foundation.h文件。
@interface student :NSobject { //声明student类然后继承自NSobject类。将成员变量放在{}当中
Int age; //一般会将成员变量的声明放在头文件当中,age的
Int height;
@public //声明不同类型的成员变量
Int weight;
}
@end
Student.m文件
#import“student.h” //必须引用该类的头文件,否则无法实现声明,就假设头文件是名字,工程文件是身体,没有名字就没有身体。
@implementation student{ //实现student类
}
@end
添加方法
为了保持面向对象的封装性,在java语言中,get方法和set方法都要用到getname和setname。在oc中,get方法需要用到与原名字同名的方法,例如age方法可以用age函数来获取age变量。
#import <foundation/foundation.h>
@interface student:NSobject{
Int age;
Int height;
} //{}起始终止与成员变量
-(int)age; //age的get方法,返回值类型用(int)表示
-(void)setage:(int)Newage; //无返回值,参数用:引出(int)为参数数据类型,形参名称为newage.返回值或者参数的类型都要用()包住。
- (void)setage:(int)Newage andheight(int)Newheight; //在oc中一个:对应一个参数,而且:也是方法名的一部分,因此方法名是setage:
-(void)setage:(int)Newage andheight:(int)height; // 增加一个方法可以同时操作age和height
//方法名是setage:andheight:动态方法,无返回值,有两个参数,andheight可以省略。方法名可以是(void)setage:(int)Newage:(int)height;
在student.m中的实现方法
#import “student.h”
@implementation student
-(int)age{
Return age;
}
-(void)setage:(int)newAge{
Age=newAge;
}
@end
Student.h和student.m都有了,这个student类就完成了,接下来就要用student类来创建一个实例。
@Import <foundation/foundation.h>
@import student.h
int main(int argc, const char * argv[]){ //在oc语言中,所有的对象存储类型都是指针,即开辟一块内存空间,然后存入相应的类型数据,然后用指针指向。
@autoreleasepool{
Student *stu=[[student alloc]init]; //在oc语言中,[调用方法的主体 方法名]就可以调用方法了。在oc中创建对象,首先需要要用创建对象的类开辟一块内存空间,然后对类进行初始化,这样对象才可以使用。
[stu release];//对象销毁
}
Return 0;
}
Student stu=[student alloc]; //用student类型开辟了一段内存空间,并创建stu指针来指向这片内存空间。刚创建的内存空间没有经过初始化时无法使用的,必须初始化之后才能使用。
Stu=[Stu init]; //将stu指针指向的那片内存空间初始化,并将初始化后的stu地址返回给指针。静态变量可以由类来调用。动态变量可以用对象来调用。
因此在oc语言中调用方法实际上需要【调用方法主体 方法名】
销毁对象,在方法调用结束之后,需要手动销毁对象。
前面的stu调用了alloc和init等一些其他的方法,这些方法并不是因为调用了foundation.h文件,而是因为student的父类是NSobject,所以可以调用这些方法。
在创立了student类的stu对象,如何调用这些方法和成员变量。
1 import <Foundation/Foundation.h>
2 #import "Student.h"
3
4 int main(int argc, const char * argv[])
5 {
6 @autoreleasepool {
7 Student *stu = [[Student alloc] init];
Stu->age=18; //只有成员变量是public的可以用指针的形式直接访问。
[Stu setage:18];//受保护的成员变量可以通过set方法来调用。
Int newage=[stu->age];
Int newage=[stu age];