OC的开始(一)之----HelloWord与类的创建及使用

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!由于本人第一次写博客,有不足的地方希望各位看官多多包涵。大笑

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值