上一节ios开发入门教程我们学会了如何创建一个object-c的入门小程序hello world,这一节我们将学习如何创建一个object-c面向对象的Student学生类,并在main函数中输出这个学生的年龄和编号。
通过本节的学习,我们将学会如何去定义一个object-c的类,并且学会如何使用get和set方法,以及学会如何定义多参数的方法,和object-c对象的创建与方法的调用。
1.我们在上一节hello项目的基础上再新建一个Student学生类,点击hello项目,右键选择“New File”,如图。
2.在弹出的对话框中选择Cocoa class图标,点击next,弹出对话框,输入class类的名称如Student,选择Language语言为Object-c开发语言,如图。
3.点击next之后就会弹出文件保存位置,默认的就可以,点击create按钮完成了Student类的创建,这个时候就会生成两个文件,一个Student.h,另一个是Student.m文件,前者是类的申明(java中叫接口)文件,申明文件不能写方法体,后者是类的实现,用于实现申明中的方法,如图。
解释一:我们在Student.h申明文件中定义Student学生类的年龄age和编号no属性,并且申明get和set方法,get方法有返回值类型int,set没有返回值,所以为void,代码如下。
//导入ios开发语言object-c框架 #import <Foundation/Foundation.h> @interface Student: NSObject{ //年龄属性 int age; //编号属性 int no; } //年龄get方法申明,返回int类型 -(int)age; //编号get方法申明,返回int类型 -(int)no; //年龄set方法申明,传入一个参数为newAge -(void)setAge:(int)newAge; //编号set方法申明,传入一个参数为newNo -(void)setNo:(int)newNo; //多参数方法的申明,同时设置年龄和编号 -(void)setAge:(int)newAge andNo:(int)newNo; @end
解释一下上面的代码,@interface是定义一个类的关键字,Student为类名,NSObject为父类
@interface Student: NSObject
这段话的整条意思就是定义student学生类,并且这个类继承NSObject,冒号“:”在这里是继承的意思,在方法中“:”后面代表的是参数,要知道,object-c语言中所有的类都是必须要继承NSObject的,学生类的属性比如说年龄和编号需要用大括号括起来“{}”,类的方法需要写在@end结束关键字里面。
解释二:Student.m文件,叫类方法的实现文件,主要用来写实现Student.h中申明的get和set等方法的逻辑,代码如下。
//实现Student.h中的方法必须要导入Student.h这个类文件 #import "Student.h" @implementation Student //年龄get方法实现 -(int)age{ return age; } //年龄set方法实现, -(void)setAge:(int)newAge{ age = newAge; } //编号get方法实现 -(int)no{ return no; } //编号set方法实现 -(void)setNo:(int)newNo{ no = newNo; } //实现同时设置年龄和编号的方法 -(void)setAge:(int)newAge andNo:(int)newNo{ age = newAge; no = newNo; } @end
@implementation这个是类的实现关键字,如果Student.m想要实现Student.h中定义的申明,必须要使用此关键字。
还有一点要注意的是object-c方法有两种,一种是静态方法(类方法),方法前面用“+”加号表示,可以直接用类名调用。另一种方法是实例方法,用“-”减号表示,必须要创建类的对象才能调用。
object-c面向对象类我们已经创建好了,这个时候我们需要在一个程序中使用我们刚刚定义的方法,代码如下。
#import <Foundation/Foundation.h> #import "Student.h" int main(int argc, const char *argv[]){ @autoreleasepool { //分配内存 //Student *stu = [Student alloc]; //初始化对象 //stu = [stu init]; //以上的两个步骤可以简写成这样 Student * stu = [[Student alloc] init]; //对象调用set方法设置年龄 //[stu setAge:20]; //对象调用get方法,返回年龄的int类型 //int age = [stu age]; //NSLog(@"输出值为:%d",age); //对象调用多参数的方法,同时设置年龄和编号 [stu setAge:20 andNo:2]; NSLog(@"年龄为:%d,编号为:%d",[stu age],[stu no]); return 0; } }
以上的代码输出结果为
年龄为:100,编号为:2
由于object-c需要手动给对象分配内存,因此在创建之前要用静态方法alloc给对象在内存中分配一个位置,然后用静态方法init初始化对象,这个时候我们就可以使用对象的set和get方法了。
“[]”中括号是固定格式,用于方法的调用,为什么Student.h中没有定义alloc和init方法而可以直接使用alloc和init方法呢?这是由于我们前面的Student.h类中继承了NSObject这个类,而这个类里面就定义了静态方法alloc和init,所以我们的子类就可以直接使用这两个方法。
object-c面向对象类的定义和方法的使用我们就圆满完成了,请记住,一定要多练习,而不是仅仅只是看看。