OC的全称是Objective-C, 很明显就是面向对象的C语言,是扩充C的面向对象编程语言。这里就不再墨迹了,网上有太多的解释,有兴趣的朋友可以去查查。
进入正题,今天给想学OC的朋友讲解一下怎么创建一个OC工程和创建类并且实例化该类的过程。
在编写程序之前,肯定要具备一个好的编程工具,这点你不用担心,因为伟大的苹果公司已经给我们准备好了:XCode(它是免费的,大家可以在App Store里面下载)
一、首先创建一个工程,工程名叫Project_CreateClass
1.打开Xcode工具,选择第二项Create a new Xcode Project,顾名思义创建一个Xcode工程
2.选择Command Line Tool 工程名:Project_CreateClass
3.恭喜你,你已经成功的创建了一个工程,我在这里说一下这个工程主要组成部分
工程名:Project_CreateClass // 这里是工程名 不用多说
|
|
文件夹:Project_CreateClass // 这里是工程默认创建了一个文件夹名字就是工程名,当然我们可以在这个工程里创建多个文件夹的。
|
|
main.m // 这个main文件就是我们这个工程唯一一个源文件了,注意OC的源文件拓展名为.m。源文件也叫可执行文件,不懂请问度娘。
打开main.m源文件,代码如下:
//
// main.m
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
下面让我们来分析下main.m文件里代码的含义吧:
#import <Foundation/Foundation.h>
#import关键字是用来导入头文件的,这个和Java中的import关键字效果差不多,不过OC不是开源的,所以,只能导入头文件,我们也只能看到头文件中的定义,是看不到源码的。
这里的Foundation.h头文件是系统提供的最基本的框架,我们按住Command键,单击就可以查看Foundation.h中的所有定义了:
好啦,Hello World已经解决了,下面按command + R(执行快捷键一定要记住)运行你的程序查看结果吧,运行结果如下:
2015-05-02 16:59:23.129 Project_CreateClass[2506:160795] Hello, World!
二、让我们来创建自定义类:
1.在Xcode右边区域,右击鼠标选择New file....
2.然后选择cocoa Class 选项 创建一个类,点击Next
3.Class名我这里叫Student,点击Next并完成创建
4.创建完自定义类后,如图:
这里生成了两个文件(Student.h和Student.m),其中Student.h文件是用来定义动作和成员变量的,但不会实现这个动作到底是干嘛的,而Student.m文件是现实Student.h定义的动作和成员变量的,下面我们打开这两个文件分析下他们到底都是做什么的。
5.打开Student.h,代码如下:
//
// Student.h
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Student : NSObject
@end
我们可以看到Student.h类的修饰符是interface,不难理解,这是一个接口类。(面向对象的三大特性:封装,继承和多态,后面会讲到,这里就不多做解释了。)在java中接口的作用就是定义方法和定义此类的特性,但不去实现该方法,而方法的实现交给实现类来做,在OC中也是同样的道理。
6.打开Student.m,代码如下:
//
// Student.m
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import "Student.h"
@implementation Student
@end
这个类就是实现Student.h的类了,好了,至此我们成功的创建了自定义类,接下来我们用代码去实现Student类的基本功能。
三、实现类的使用:
1.编写Student.h类,代码如下:
//
// Student.h
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
/*
@public 和java一样是公共的成员 可以被项目中所有类调用
@private 私有成员变量 只能在类的内部调用
@protected 受保护的成员变量,只能被该类和子类调用
不写@public的话,默认是protected权限
*/
@public // 访问修饰符号表示下面的成员变量是公共的
// 学生姓名
NSString *_name;
// 学生年龄
int _age;
// 学生爱好
NSString *_hobby;
// 学生地址
NSString *_address;
}
// 方法声明
-(void) sayHello; // 打招呼的方法
-(void) eat; // 吃饭的方法
@end
别急,我们来分析下这些代码都是什么意思,首先,我们看到,在@interface下的“{}”中,声明了若干变量来修饰学生的特性,在这里这些修饰学生的变量我们就叫做成员变量。
@ public 就是用来说明这些成员变量的访问等级,在代码中都有注解,这里不多做解释了。
下面我们来看类的实现部分,也就是方法的声明:
// 方法声明
-(void) sayHello; // 打招呼的方法
-(void) eat; // 吃饭的方法
减号(-)表明了该方法是实例方法,在类方法中则用(+)。括号中(void)表示返回类型,void表示无返回值,我们也可以写成(int),(boolean),(NSString)等。eat和sayHello代表方法名。
2.类的具体实现
在Student.m实现具体方法,代码如下:
//
// Student.m
// Project_CreateClass
//
// Created by NewbieLi on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import "Student.h"
@implementation Student
// 实现方法:
// 实现eat方法
- (void) eat {
NSLog(@"学生开始吃饭了!");
}
// 实现sayHello方法
- (void) sayHello {
NSLog(@"学生说:你好!");
}
+ (Student *)newStudent {
return [[Student alloc] init];
}
@end
这里就很好理解了,将接口类Student.h的eat和sayHello方法实现。
3.对象的实例化及方法的调用
下面我们在main.m中进行Studentdui对象的初始化及调用,代码如下:
//
// main.m
// Project_CreateClass
//
// Created by lanou3g on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建对象,完成对象的声明,实例化,初始化
Student *stu = [[Student alloc] init];
// 调用对象的sayHello方法
stu.sayHello;
}
return 0;
}
运行看结果吧 command + R走起,结果:
2015-05-02 19:35:26.132 Project_CreateClass[3018:209079] 学生说:你好!
好了,至此我们成功的创建了一个对象并调用了它的sayHello方法。
四、下面来实现对象Student的成员变量的get,set方法。
1.在接口Student.h中定义get,set方法,代码如下:
// 学生姓名的get方法
- (NSString *) getName;
// 学生姓名的set方法
- (void) setName : (NSString *) name;
// 学生年龄的get方法
- (int) getAge;
// 学生年龄的set方法
- (void) setAge : (int) age;
// 学生爱好的get方法
- (NSString *) getHobby;
// 学生爱好的set方法
- (void) setHobby : (NSString *) hobby;
// 学生地址的get方法
- (NSString *) getAddress;
// 学生地址的set方法
- (void) setAddress : (NSString *) address;
// 打印出学生的基本信息
- (void) StudentMessage;
2.在实现类Student.m中实现上面创建的方法,代码如下:
// 实现学生姓名的get方法
- (NSString *) getName {
return _name;
}
// 实现学生姓名的set方法
- (void) setName : (NSString *) name {
_name = name;
}
// 实现学生年龄的get方法
- (int) getAge {
return _age;
}
// 实现学生年龄的set方法
- (void) setAge : (int) age {
_age = age;
}
// 实现学生爱好的get方法
- (NSString *) getHobby {
return _hobby;
}
// 实现学生爱好的set方法
- (void) setHobby : (NSString *) hobby {
_hobby = hobby;
}
// 实现学生地址的get方法
- (NSString *) getAddress {
return _address;
}
// 实现学生地址的set方法
- (void) setAddress : (NSString *) address {
_address = address;
}
// 实现打印出学生的基本信息
- (void) StudentMessage {
// 打印出学生的基本信息
NSLog(@"学生姓名:%@,年龄:%d,爱好:%@,地址:%@", _name, _age, _hobby, _address);
}
3.在main.m文件中对对象Student的成员变量进行赋值,并调用set,get,StudentMessage方法。代码如下:
//
// main.m
// Project_CreateClass
//
// Created by lanou3g on 15/5/2.
// Copyright (c) 2015年 NewbieLi. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 创建对象,完成对象的声明,实例化,初始化
Student *stu = [[Student alloc] init];
// 调用对象stu的set方法
[stu setName:@"张三"];
[stu setAge:18];
[stu setHobby:@"篮球"];
[stu setAddress:@"地球村"];
// 运用get方法分别打印出对象stu成员变量的值
NSLog(@"该学生的姓名是%@", [stu getName]);
NSLog(@"该学生的年龄是%d", [stu getAge]);
NSLog(@"该学生的爱好是%@", [stu getHobby]);
NSLog(@"该学生的地址是%@", [stu getAddress]);
// 调用对象stu的StudentMessage方法,打印出该学生的所有信息
stu.StudentMessage;
}
return 0;
}
这里就和java差不多了(只是语法上存在这差距) [stu setName:@"张三"];给_name属性赋值,[stu getName] 返回name值。
OK!由于本人第一次写博客,有不足的地方希望各位看官多多包涵。