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语言的历史
#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";
字符串在打印时用%@
三、面向过程编程与面向对象编程
回忆:
赵本山与宋丹丹某年春晚小品,内容是把大象放入冰箱分为几步?
面向过程版:第一步,打开冰箱门。第二步,把大象放入冰箱。第三步,关闭冰箱门。首先想到的是完成这个任务的过程是什么。
面向对象版:第一步,有冰箱、大象。第二步,冰箱有开门、关门的功能。第三步,大象有进冰箱的功能。首先想到的是完成这个任务都有哪些对象参与,最终是要完成任务。
四、类和对象
......
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;
}
今天的课程就这样愉快的结束了,小柒感谢各位的陪伴,代码多加练习,记得预习自定义初始化方法,便利构造器,设置器与访问器。