Objective-C第一章类与对象

你好!我是小柒很高兴陪你一起学习Objective-C,接下来的一段日子要加倍努力啊!

Objective-C

本节内容:

1、Objective-C概述

2、从C过渡到OC

3、面向过程编程与面向对象编程

4、类和对象

5、OC中创建类

6、类的声明与实现

7、实例方法与类方法声明、实现、调用

8、id类型

 

 

一、Objective-C概述

1、Objective-C语言的历史

     Objective-C简称OC,扩充自C语言的面向对象编程语言。
     苹果OS X和iOS操作系统的主要编程语言。
     乔布斯 NeXT公司,OC语言库和NEXTSTEP开发环境。
     NeXT软件成为Mac电脑和iOS操作系统的基础。
     iOS开发也兼容C语言和C++混编
2、时间进度
     1980年初发明OC语言—>1988年NeXT公司使用OC开发—>1996年成为苹果主要编程语言
3、OC语言的特点
     C语言的超集,允许在OC中使用C语言源代码,编译器兼容C语言程序。
     具备完善的面相对象特性,包含一个运行时系统,且类库丰富
4、创建OC工程
图片1————————————————————————————————————————————————————————————————————————————————————
 图片2————————————————————————————————————————————————————————————————————————————————————
图片3—————————————————————————————————————————————————————————————————————————————————————
 
 图片4—————————————————————————————————————————————————————————————————————————————————————
5、详解oc语言的main.m
//头文件<Foundation框架>
//#import与#include都可以导入头文件,但是#include不能重发导入同一个头文件。

#import <Foundation/Foundation.h>

//函数和C语言一样有且只有一个主函数

int main(int argc, const char * argv[]) {

//自动释放池

    @autoreleasepool {

        // insert code here...

//OC输出NSLog和C语言的printf一样,但是格式不同NSLog里面有@符。

        NSLog(@"Hello, World!");

    }

//返回值

    return 0;

}

6、常用快捷键

图5———————————————————————————————————————————————————————————————————————————————————————

 小柒提示:快捷键用好了,格外显得厉害。

 

 二、从C语言过渡到OC语言

1)关键字

@interface,@implementation,@end......

2)字符串

字符串都是以@开头的,比如@"Hello"是OC中的字符串

3)打印

C语言中使用printf("Hello");打印字符串,OC中使用NSLog(@"Hello")函数打印字符串,而且OC不需要写\n

4)常用类型

C语言的数据类型在OC里面也能使用,OC中也有自己的数据类型

//整型

NSInteger a = 10;

//布尔类型

BOOL b = YES;

BOOL c = NO;

布尔类型用来判断与C语言的0和1一样

//结构体

NSRange range = {1,2};

//字符串

NSString *s = @"qmy";

字符串在打印时用%@

 

三、面向过程编程与面向对象编程

小柒面向过程编程与面向对象编程是什么?
答:面向过程编程与面向对象编程都是一种编程思想。
C语言就是面向过程编程,面向对象也不只是OC自己有C++,Java,C#都是面向对象编程

回忆:

赵本山与宋丹丹某年春晚小品,内容是把大象放入冰箱分为几步?

面向过程版:第一步,打开冰箱门。第二步,把大象放入冰箱。第三步,关闭冰箱门。首先想到的是完成这个任务的过程是什么。

面向对象版第一步,有冰箱、大象。第二步,冰箱有开门、关门的功能。第三步,大象有进冰箱的功能。首先想到的是完成这个任务都有哪些对象参与,最终是要完成任务。

四、类和对象

类和对象是面向对象的核心,定义类,创建对象,使用对象。
 1、生活中的类
学生就是一个类,这个类里面有小学生,中学生,大学生。
手机也是一个类,苹果手机,三星手机,小米手机。
矿泉水也是一个类,农夫山泉矿泉水,纯中纯矿泉水,康师傅矿泉水。
人也是一个类,男人,女人。

...... 

2、身边的对象

图6——————————————————————————————————————————————————————————————————————————————————————

 

 如上图,收银员是对象,顾客也是对象

1)、特征和行为

       特征

收银员对象的特征:姓名、职位、年龄、体重。

顾客   对象的特征:姓名、年龄、体重。

        行为

收银员对象的行为:收款、打印帐单。

顾客   对象的行为:购买商品。

       她们都属于人类

2)、 属性和方法

图7———————————————————————————————————————————————————————————————————————————————————————

小柒什么是属性?

答:属性——对象具有的各种特征,反映了该对象的信息,每个对象的每属性都拥有特定值。

 图8———————————————————————————————————————————————————————————————————————————————————————

 

 小柒什么是方法?

答:方法就是对象的行为。

 3、从对象抽像出类

例1、农夫山泉矿泉水,纯中纯矿泉水,康师傅矿泉水 可以抽象出矿泉水类

例2、小学生,中学生,大学生可以抽像出学生类

例3、男人,女人可以抽象出人

例4、苹果手机,三星手机,小米手机可以抽象出手机类

4、类

小柒说了这么多到底什么是类啊?

答:类是模子,确定对象将会拥有的属性(特征)和方法(行为),类是对象的类型,不同于int等基本数据类型,具有方法。

5、类和对象得区别

 类定义实体,类是概念定义对象的所有特征和所需的行为;

 对象是实际的实体,对象是真实存在的模型;

 类是对象的原型,所有属于同一个类的对象都具有相同的特征和行为。

 

五、OC中创建类

1、须知:

1)、先创建好一个OC工程如图1—4

2)、创建类的步骤:

第一种创建方式:鼠标左键选中源文件main.m ————> 单击右键————> New File... ————> OS X ————> Soure  ————>Cocoa Class ————> Next ————> Class:填写类名  ————> Subclass of:填写NSObject ————> Language:选Objective-C ————>Next ———创建完成了 (Also create XIB  不用选)

 

第二种创建方式:点击Xcode状态栏上的File ————> New ————> File... ————>OS X ————> Soure  ————>Cocoa Class ————> Next ————> Class:填写类名  ————> Subclass of:填写NSObject ————> Language:选Objective-C ————>Next ———创建完成了 (Also create XIB  不用选)

 

第三种创建方式:快捷键command+n ————> OS X ————> Soure  ————>Cocoa Class ————> Next ————> Class:填写类名  ————> Subclass of:填写NSObject ————> Language:选Objective-C ————>Next ———创建完成了 (Also create XIB  不用选)

图9———————————————————————————————————————————————————————————————————————————————————————

创建OK的效果图

图10——————————————————————————————————————————————————————————————————————————————————————

 

 六、类的声明与实现

1、先明确创建一个Student类,Student类分为:Student.h和Student.m两个文件 ;Student.h文件叫声明文件也叫接口部分,Student.m实现部分。

2、面向对象编程中使用对象完成程序,开发中:先定义类,再创建对象,后使用,定义类分两步:接口部分和实现部分。分开写。

小柒什么是接口部分?什么是实现部分?

1).接口部分:对外声明类的特征和行为。

    格式:    

//Student.h

//头文件#import <Foundation/Foundation.h>基于Foundation框架

#import <Foundation/Foundation.h>

 

//接口@interface 类名Student : 父类NSObject

@interface Student : NSObject

{

//    定义属性部分,也叫成员变量

}

 

//声明方法

 

//停止@end,超过@end执行运行

@end

 

2).实现部分:对内实现行为。

   格式: 

//头文件

#import "Student.h"

 

//实现 类名

@implementation Student

 

//停止

@end

 

七、实例方法与类方法声明、实现、调用

1)、实例方法,声明、实现、调用:

//声明文件 Student.h

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

 

{

//    成员变量默认的权限是受保护的,也就是说,只有本类文件可以使用

    @public//公共的,谁都可以访问

    

//    定义属性部分,也叫成员变量

    NSString *name;//姓名

    int age;//年龄

    

}

 

//声明方法分为-实例方法和+类方法两种。

//-/+方法类型(返回类型)方法名;

-(void)sayHi;

 

//停止

@end

 

//  实现文件 Student.m

//头文件

#import "Student.h"

 

//实现 类名

@implementation Student

//方法的实现

//-/+方法类型(返回类型)方法名

//{

//打印内容

//}

-(void)sayHi

{

//    打印

  NSLog(@"Hello!");

//    打印姓名年龄

 

  NSLog(@"我是%@,今年%d",name,age);

}

 

//停止

@end

 

//  main.m 调用

#import <Foundation/Foundation.h>

//想调用先导入类的头文件.h #import "Student.h"

#import "Student.h"

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

// 创建对象

// 类名 *对象名 = [[类名 alloc分配一块内存] init初始化];

        Student * stu = [[Student alloc] init];

        //给成员变量赋值

//      使用->指向必须在成员变量里面添加@public

//       对象名 -> 成员变量 = ;

        stu -> name = @"张三";

        stu -> age  =21;

//      获取对象的姓名年龄

        NSLog(@"姓名%@,%d岁了",stu -> name,stu -> age);

//       对象调用-实例方法

//      [对象名 方法名];

        [stu sayHi];

    }

    return 0;

}

打印结果:

2015-12-29 11:49:00.206 Task[4695:78229] 姓名张三,21岁了

2015-12-29 11:49:00.206 Task[4695:78229] Hello!

2015-12-29 11:49:00.206 Task[4695:78229] 我是张三,今年21

 

2)、类方法的声明、实现、调用 :

// 声明文件 Student.h

#import <Foundation/Foundation.h>

 

@interface Student : NSObject

 

//+方法类型(类名 *)方法名;

+(Student *)studay;

 

@end

 

 //实现文件 Student.m

 

#import "Student.h"

 

@implementation Student

//+方法类型(类名 *)方法名

+(Student *)studay

{

    NSLog(@"好好学习天天向上");

//    需要写返回值

    return 0;

}

@end

 

/ /调用 main.m

#import <Foundation/Foundation.h>

//导入头文件

#import "Student.h"

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

//        类方法:用类调用

        [Student studay];

    }

    return 0;

}

 打印结果:

2015-12-29 11:09:04.438 Task2[4232:60630] 好好学习天天向上

小柒提示:实例方法用对象调用,类方法只能用类调用,类方法在实现时需要写 return且实现时不能在里面打印成员变量

八、id类型

声明部分.h

id表示任意类型

//表示这个方法属于对象,只能对象执行。

-(id)eat;

//表示这个方法属于类,只能类执行

+(id)play;

 

 实现部分.m

-(id)eat{

//    self关键字表示对象本身

    return self;

}

+(id)play{

    return 0;

}

今天的课程就这样愉快的结束了,小柒感谢各位的陪伴,代码多加练习,记得预习自定义初始化方法,便利构造器,设置器与访问器

 

 

 

 

 

posted on 2015-12-27 19:02  xxQMYxx  阅读(127)  评论(0编辑  收藏  举报

导航