一、OC简介
C语言的基础上,增加了一层最小的面向对象语法
完全兼容C语言
可以在OC代码中混入C语言代码,甚至是C++代码
可以使用OC开发Mac OS X平台和iOS平台的应用程序
二、OC语法预览
1. 关键字
基本上所有关键字都是以@开头
下面列举一些常见的关键字,看一眼就行了,不用去翻资料查找它们的含义
@interface、@implementation、@end
@public、@protected、@private、@selector
@try、@catch、@throw、@finally
@protocol、@optional、@required、@class
@property、@synthesize、@dynamic
self、super、id、_cmd、__block、__strong、__weak、
2. 字符串以@开头
比如@"Hello"是OC中的字符串,而"Hello"则是C语言中的字符串
2. 其他语法
三、第1个OC程序
1. 代码编写
跟C语言一样,OC程序的入口依然是main函数,只不过写到一个.m文件中。比如这里写到一个main.m文件中(文件名可以是中文)
#include<stdio.h>
int main()
{
printf("第1个OC程序\n");
return0;
}
2. 终端指令
编译cc –cmain.m
链接cc main.o
运行./a.out
四、第2个OC程序
1. 代码编写
来点跟C语言不一样的,使用NSLog函数输出内容
#import <Foundation/Foundation.h>
int main()
{
NSLog(@"第2个OC程序");
return0;
}
2. 终端指令
编译cc –cmain.m
链接cc main.o –framework Foundation
运行./a.out
3. NSLog与printf的区别
NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数
NSLog输出后会自动换行,printf输出后不会自动换行
使用NSLog需要#import<Foundation/Foundation.h>
使用printf需要#include<stdio.h>
4. #import的作用
跟#include一样,用来拷贝某个文件的内容
可以自动防止文件内容被拷贝多次,也就以为着头文件中不用加入下面的预处理指令了
#ifndef _STDIO_H_
#define _STDIO_H_
#endif
如图:
5. Foundation框架的作用
开发OC、iOS、Mac程序必备的框架
此框架中包含了很多常用的API(应用编程接口)
框架中包含了很多头文件,若想使用整个框架的内容,包含它的主头文件即可
#import<Foundation/Foundation.h>
主头文件:
1、名字一般与框架名称一样,包含了框架中的所有其他文件
2、Foundation框架的主头文件名称就是Foundation.h
3、只要包含主头文件就可以使用整个框架的东西
运行过程:
编写OC源文件:.m、.c
编译: cc -c xxx.m xxx.c
链接:cc xxx.o xxx.o -framework Foundation
(只有用到了Foundation框架才需要加上-framework Foundation)
6. BOOL的使用
BOOL类型的本质
typedefsignedcharBOOL;
BOOL类型的变量有2种取值:YES、NO
#define YES (BOOL)1
#define NO (BOOL)0
BOOL的输出(当做整数来用)
NSLog(@"%d%d",YES,NO);
五、第3个OC程序
1. 多个.m文件的开发
跟C语言中多个.c文件的开发是一样的
1) 编写3个文件
main.m
#import "one.h"
int main()
{
test();
return0;
}
one.h
void test();
one.m
#import <Foundation/Foundation.h>
void test()
{
NSLog(@"调用了test函数");
}
2) 终端指令
编译:cc –cmain.m test.m
链接:cc main.otest.o –framework Foundation
运行:./a.out
2. .m文件和.c文件混用开发
1) 编写3个文件
main.m
#import "one.h"
int main()
{
test();
return0;
}
one.h
void test();
one.c
#include<stdio.h>
void test()
{
printf("调用了test函数\n");
}
2) 终端指令
编译:cc –cmain.m test.m
链接:cc main.otest.o
运行:./a.out
面向对象和面向过程思想
OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想
1. 面向对象和面向过程的区别
1) 以用电脑听歌为例子
面向过程:
打开电脑
播放电脑中的歌曲
关闭电脑
面向对象
电脑
开机
关机
2) 区别分析
面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象
没有开发经验很难感受到它们的区别,两种思想都能达到解决问题的目的,但是解决思路不一样
2. 现实生活中面向对象的例子
想打电话\发短信 à 找手机,不用分析电话要怎样才能拨通
去饭店吃饭 à 找服务员,不用分析怎么到厨房炒菜
汽车坏了 à 找汽车维修工,不用分析修车的步骤
境界:万物皆对象
3. 常用术语
面向过程 ProcedureOriented
面向对象 ObjectOriented,简称OO
面向对象编程 ObjectOriented Programming,简称OOP
二、 类和对象的关系
面向对象中有2个非常重要的概念:类和对象
1. 如何创建对象
1) 面向对象解决问题的时候必须有对象,那如何创建对象呢?
2) 现实生活的例子:如何创造汽车对象?
a) 需要先有汽车的建造图纸,图纸上描述清楚汽车应该具备的属性和功能(行为)
属性:轮子数、时速
功能(行为):跑
b) 然后再根据图纸上的描述生成汽车
c) 每一辆汽车都是对象,都有自己具体的属性值,都是图纸的实例
d) 图纸是抽象的,房子是具体的。图纸是对房子对象的高度概括
如图:
2. OC中的面相对象
1) OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类
2) OC利用类来创建对象,对象是类的具体存在
3) 因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象
3. 需要设计哪些类,如何设计类
1) 类的设计,只关心3样东西:
事物名称(类名):人(Person)
属性:身高(height)、年龄(age)
行为(功能):跑(run)、打架(fight)
2) 一般名词都是类
3) 拥有相同(或者类似)属性和行为的对象都可以抽像出一个类
4) 哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。打开电脑(开机)这个行为应该是属于电脑的。