1、O和OC的差别
1:c的文件扩展名是.c,oc的文件扩展名是.m
2:包含头文件,c使用#include,oc使用#import,#include需要判断头文件是否已经被包含,#import不需要程序员判断是否已经被包含
3:打印方法,c使用printf,oc使用NSLog
换行加\n 自动换行
" " @" "
4:打印字符串,C使用%s, OC使用%@
5:C的数组,只能存一种类型,OC的数组,可以同时保存不同类型的对象
6:C的数组,一般保存基本数据类型,OC的数组,只能保存对象
2、面向对象和面向过程 思想
1:面向过程:关注的是算法,是功能的实现
2:面向对象:关注的是对象,和有没有一个功能的实现
3:不管面向过程还是面向对象,都是思想,C也能面向对象,OC也能面向过程
4:什么是对象,什么是类
姚明:头、四肢、躯干,高,吃喝玩乐,打篮球
梅西:头、四肢、躯干,矮,吃喝玩乐,踢足球
人类
StudentClass类
lily 对象
lucy 对象
polly 对象
语文分、数学分、英语分,算平均分
3、OC程序的解释
1:student.h文件解释
#import <Foundation/Foundation.h>//包含头文件(系统库的一个头文件)
//OC中的.h文件又被叫做声明文件,一般在这里会声明一个类的属性和方法
//一个.h文件一般要有
//@interface 类名:爸爸类
//@end组成
//本类Student就是类名,类名后要由一个:(冒号)引导这个类的爸爸类(父类)
//在@interface和@end之间是我们声明变量和方法的位置
@interface Student : NSObject
//成员变量,要写在一个{}中,每个变量命名时,应该用_开头
{//这里声明了三个成员变量,他们分别表示一个student对象的语文、数学、英语成绩
//这些成员变量的生命周期,是和这个类的对象一样,等于是这个类的一个全局变量
float _chineseScore;
float _mathScore;
float _englishScore;
}
//方法(函数)列表
/*
OC的方法(函数)有以下部分组成
一个方法的开头有一个符号:-、+。-表示这个方法应该由这个类的一个具体的对象来调用,所以-方法又称作对象方法。+表示这个方法由这个类的类名来调用,所以+方法又称作类方法。
在这个符号后面是一个(),括号里是这个方法的返回值类型,一个方法只能有一个返回值类型,现在这个方法的返回值就是void无返回值。
在返回值后面就是函数体,这里的函数体就是setChineseScore
如果一个方法有参数那么在函数体后会有一个:冒号,这个冒号用来引导一个参数
参数由参数类型和参数名组成,其中参数类型应该用()括起来,参数名在参数类型后面,这里的参数类型就是(float),参数名就是newChinese
最后,要有一个;分号
*/
-(void)setChineseScore:(float)newChinese;//给_chineseScore这个成员变量赋值
-(void)setMathScore:(float)newMath;
-(void)setEnglishScore:(float)newEnglish;
//如果一个方法有超过一个以上的参数时,每两个参数之间用 空格隔开,每一个参数之前必须要有一个有实际意义的方法(函数)体
-(void)getAverageScoreWithChinese:(float)chinese andMath:(float)math andEnglish:(float)english;
//上面这个方法的方法名就是getAverageScoreWithChinese:andMath:andEnglish:
-(float)getChinese;//返回得到当前对象的语文成绩
-(float)getMath;
-(float)getEnglish;
-(float)returnAverageScore;
@end
2:student.m文件解释
#import "Student.h"
//OC的.m文件又叫实现文件,在这里实现.h文件中的方法
@implementation Student
-(void)setChineseScore:(float)newChinese//给这类的_chineseScore这个成员变量赋值
{
_chineseScore = newChinese;
}
3:开辟空间的同时进行初始化
//初始化一个类的对象的成员变量的方法 init方法,这个方法应该一个类的对象alloc出来之后立刻执行
-(id)initWithHeight:(int)height andAge:(int)age andEyePower:(float)eyePower;
-(id)initWithHeight:(int)height andAge:(int)age andEyePower:(float)eyePower
{
//父类init
self = [super init];//self就是自己,也就是调用这个init方法的对象
if(self)//判断这个self有没有
{
_height = height;
_age = age;
_eyePower = eyePower;
}
return self;//把初始化好的这个对象返回
}
4:AppDelegate.h文件的解释
#import "AppDelegate.h"
//我要用Student这个类,就要包含这个类的.h文件,永远也不要包含一个类的.m文件
#import "Student.h"
#import "People.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor greenColor];
[self.window makeKeyAndVisible];
//使用OC的类和方法
//1、实例化一个类的对象
Student *lily = [Student alloc];
//OC的方法调用的时候,要有一个[]括起来,[]里面有两个部分组成,前半部分是调用方法的“类”或者“对象”,后半部分是方法名及其参数
//注意!,lily不是对象!而是一个指针,这个指针指向了一个对象,我们未来会使用这个指针,这个时候其实使用的是这个指针所指向的对象
//等号右面的整个才是一个对象,一般使用[类名 alloc]的方法来创建一个对象,alloc会申请一块内存
//2、为这个对象的成员变量们赋值
[lily setChineseScore:80.0];
[lily setMathScore:99.0];
[lily setEnglishScore:10.0];
//用一个对象的指针调用了一下-方法,给这个对象的一个成员变量赋值
//3、把一个对象的成员变量的值取出来
NSLog(@"%f",[lily getChinese]);
NSLog(@"%f",[lily getMath]);
NSLog(@"%f",[lily getEnglish]);
//出现了一个lucy?
Student *lucy = [Student alloc];
[lucy setChineseScore:12.0];
[lucy setMathScore:50.0];
[lucy setEnglishScore:40.0];
NSLog(@"%f,%f,%f",[lucy getChinese],[lucy getMath],[lucy getEnglish]);
NSLog(@"%f,%f,%f",[lily getChinese],[lily getMath],[lily getEnglish]);
//计算两个人的平均分
NSLog(@"%f",[lily returnAverageScore]);
NSLog(@"%f",[lucy returnAverageScore]);
//使用人类玩玩
//1、实例化一个人
People *my = [[People alloc] initWithHeight:200 andAge:18 andEyePower:1.5];
NSLog(@"我是一个身高%d厘米,年龄%d岁,视力%0.1f的人",[my getHeight],[my getAge],[my getEyePower]);
//2、使用类方法
[People play];
return YES;
}
4、快捷键
1:command + shift + 3 —— 截全屏
2:command + shift + 4 —— 自由截屏
3:command + shift + k —— 清空缓存
4:command + / —— 注释
5:command + r —— Xcode运行
6:command + b —— Xcode编译
7:command + 向上箭头 —— 光标移动到当前文件头部
8:command + 向下箭头 —— 光标移动到当前文件尾部
9:command + 向左箭头 —— 光标移动到当前行头部
10:command + 向右箭头 —— 光标移动到当前行尾部
练习:
1、新建工程;
2、建一个Computer类;
3、这个类又两个成员变量,一个是int_price,一个是float_weight
4、请实现这个类的成员变量的赋值、取值方法
5、实现一个方法,在方法中判断,如果这个电脑的价格超过5000,打印不买,如果这个电脑的重量超过2,打印破烂,如果这个电脑的价格低于5000并且重量小于2,打印买了
请分别实例化三个电脑
mac 4000 1
lenovo 1000 10
haier 8000 1.5
作业:
1、实现三行商品 的图片id、商品id、价格的打印
举例:第一个商品的图片id是001,商品id是1001,价格是3000
第二行。。。。。
第三行。。。。。
可以选择实例化出来三个商品对象,分别赋值,也可以用init方法初始化赋值。实例化的时候可以使用循环的方法来实现
2、实现一个汽车跑路的打印
2.1、做一个类,这个类是汽车类,有一个成员变量(速度),有一个方法计算这个汽车跑完一段距离的用时(这个方法有一个参数是长度)
2.2、再做一个类,这个类是道路,有一个成员变量(长度)
2.3、实例化出来一个汽车对象并赋值速度
2.4、实例化出来一个道路对象并赋值长度
2.5、计算这个汽车走完这段道路的用时,并打印