Objective - C概述
- C:就是C语言
- Objective:面向对象的
- Objective-C:面向对象的C语言
OC的本质还是C语言,在C的基础之上增加了一小部分的面向对象的语法,将C语言复杂的,繁琐的语法封装的更为简单.
OC语言完全兼容C语言,也就是说在OC语言中可以写任意的C语言语句.
OC简要发展简史
- 布莱德考克斯 Brad Cox
-
- 上世界80年代初七,将C语言和smalltalk的优势设计出了Objective-C语言
-
- smalltalk是为数不多的面向对象的语言之一
-
- 融合C语言高级语言的特性
-
- 1985年乔布斯创建NeXT公司,致力于设计经济实惠且功能强大的工作站(电脑),并选择Unix作为其工作站的操作系统
-
- 后来设计出了NextStep - 使用OC语言编写的一套功能强大的界面工具包,给开发人员提供了一个工具库,给开发人员去开发带界面的软件.
-
- 终于1995年NeXT公司好不容易把OC买了过来,获得了全部的商业版权.
-
- 1996年苹果公司收购NeXT.其实苹果公司那时候快倒闭了,所以普遍认为是NeXT收购了苹果.NextStep得到了Mac开发人员的广泛认可,更名为Cocoa,从此OC成为开发Mac平台的主力语言.
-
- 2010年随着iOS的火爆,OC又成为了iOS平台的主力开发语言.
OC的未来
- 苹果2014年的WWDC大会退出Swift,在2015年WWDC上宣布年底发布2.0,并且将来源!
- Swift的优点:快速,现代,安全,互动,且全面优于Objective-C.
- 按照苹果的行事风格(iPhone升级不能降级,Xcode6只能开发iOS8).
- OC肯定要被Swift取代
基础班学习目标
- 面向对象的语法
- 初步建立面向对象的思维
- 具备初级的项目需求分析能力
OC基础语法
- Objective-C的源文件的后缀名是.m (message)消息机制
- C程序的源文件的后缀名是.c
- main函数仍然是Objective-C的入口和出口,参数也是可有可无.返回值代表程序结束的状态.
import指令和include的区别
- #开头的是预处理指令,在预编译时候执行
- #import指令是#include指令的增强版
- 作用仍然是将指定的文件的内容拷贝到写指令的地方.
- #include指令想只被包含一次就要结合条件编译指令
用法
<> 在编译器目录找 "" 在项目当前目录找
框架
是苹果或者第三方将程序员在开发过程中经常要用的功能写好,表贤盛一个一个类或者函数,这些类型的函数集合我们叫做框架,有点像C语言的函数库
常见的框架
Foundation : OC中基础的语法支持,就基本的功能 输入输出 数据类型 AVFoundation : Audio Video UIKit : 做界面的 CroeLation : 定位 ...
Founation框架: 基础基本的意思
提供了OC中最基础的语法支持 字符串,数组等
#import <Foundation/Foundation.h>
引入了Foundtion框架,这个框架在Foundation.h这个头文件里面
Frameworks 这个文件夹里面
1. Foundation框架里面有很多头文件
2. Foundation.h包含了Foundation框架里面所有的头文件,是一个包含其他头文件的文件.
3. <>中的/其实就是写Foundation这个文件夹中的Foundation.h的地址
4. 这就是引入框架和头文件的一点小区别
自动释放池 @auto release pool
目前不需要了解,可以把代码写在里面也可以删除掉
NSLog
- 这是Foundation框架中提供的一个函数
- 作用:是printf函数的增强版,向控制台输出信息的
语法格式
NSLog(@"输出信息");
增强的地方
2016-09-10 10:14:52.179 DAY01 - OC基础语法[768:104457] Hello,曾凡怡! 输出这句话的时间 是哪一个程序输出的 [PID Process ID:线程ID] 代表程序的进程ID 一个正在运行的程序就是进程 操作系统给每一个程序编号就是PID 1. 输出完信息以后会自动换行 2. printf可以做的他绝对可以做.仍然可以使用printf的占位符来输出变量的值,方法一样 3. 除了输出C语言的语句,还能输出OC新增的数据类型变量的值 ##注意的地方## 1. NSLog函数的第一个参数是一个字符串,这个字符串前面一定要加一个@前缀. 2. NSLog不需要手动加\n,加了自动换行就会失效 3. NSLog就是替换printf的,就不要再用printf了. 使用NSLog%s输出中文字符串 是无法输出的,%@输出OC字符串就可以了
NSString字符串
- C语言存储字符串的方式
-
- 使用字符组.
-
- 使用字符指针.
OC中看到了C存储字符串的烦躁,专门设计了一个类型保存字符串数据,这个类型叫做NSString
NSStirng *str;
专门用来存储OC字符串的地址的
OC的字符串常量必须要使用@符号作为字符串前缀
“jack” 这是C语言字符串常量
==必须要区分C语言字符串和OC字符串,就是加不加@前缀的区别==
NSLog第一个参数是一个NSString类型,所以在给串的时候一定要加@符号
NSString *name = @”小明”;
NSLog(@”%@”,name);
==OC当中新增的NSString类型不能用printf输出==
NS前缀是什么意思
NextStep–>cocoa–>NS前缀表示这些东西以前是NS的,也是为了防止重名
@符号的作用
- 将C的字符串转换为OC的字符串
- OC在C的基础上新增了一些关键字,新增的这些关键字大部分都是以@符号开头的.
注释
没有什么区别…
可以自己写文档注释,vvdocument一样的效果
/**
* 功能:打印姓名
*/
void printName()
{
NSLog(@"我赵日天不服!");
}
可以定义OC的函数吗?
也可以,定义的方式一模一样,但我们很少这样做,包括iOS开发也是
OC的运行流程
1. 编写,编译,链接的流程,差不多
- 创建一个.m的文件
- 写上符合OC语法的代码
编译
a. 预编译:执行预处理代码
b. 检查语法
c. 生成.o目标文件 objective链接
a. 添加启动代码
b. 链接函数
如果代码当中使用到了框架中的功能(函数或者类),在链接的时候就必须高速编译器在哪个框架当中去找.import只能让编译不报错.有函数的声明,==但是链接的时候找不到实现在哪里!==
cc main.o -framework Foundation
cc xx.o -framework 框架名称
自动找太浪费时间,框架太多了,一个个找浪费时间.
2. 和C程序各个阶段的文件后缀名对比
源文件 目标文件 可执行文件
.c .o .out
.m .o .out
除了源文件不一样,就是链接的时候要指定一下是哪个框架
3. 在Xcode中我们点击运行按钮,自动链接,不需要手动指定
新增的一些变量类型
- OC支持C语言当中的所有数据类型
- 数据类型 : int double float char short. long long. long .unsigned signer
- 构造类型 : 数组.结构体 枚举
- 指针
- typerde定义类型
- void空类型
- OC在C的基础上新增了一些类型
- BOOL类型
- Boolean类型
- class类型
- nil
- SEL
- block
BOOL是一个类型那么我们就来声明一个BOOL类型的变量
BOOL b1 = YES;
b1 = NO;
一般情况下用来保存一个条件表达式的结果.
C语言是0 和 1 来表示成立或者不成立
int num = 10;
BOOL b1 = num > 0;
成立结果是YES,否则是NO.
BOOL 类型的本质是 ==typedef signed char BOOL== 有符号的char变量,占1个字节
#define YES ((BOOL)1)
#define NO ((BOOL)0)
其实就是宏定义
YES %d 打印出来就是1,NO就是0
Boolean类型
这个类型的变量支撑存储true或者false这两个数据.
Boolean b1 = true;
bi = false
bi = 10 > 3;
typedef unsigned char Boolean;
是一个无符号的char变量,BOOL 是一个有变量的char变量
#define true 1
#define false 0
累感无爱,其实就是C语言的 1和0
其实就是为了吸引其他平台的程序员过来,有他们熟悉的变量.我们平时用BOOL
class类型 ( 类 )
NSString 也是一个类
nil
和NULL差不多
SEL
这个类型的变量是来保存方法的
block
用来保存一段代码
对比OC和C的运算符
OC支持C的所有的运算符,没有新增运算符~~
- 赋值运算符
- 算数运算符
- 复合赋值运算符
- 自增自减
- 逗号运算
- 关系运算符( 比较运算符 )
- 逻辑运算符
- 三元运算符
- 取地址运算符
- *指针访问运算符
- 位运算符
OC控制语句
OC支持所有的C语言控制语句,可以理解C语言所有的代码可以写在OC里面并且效果一致
- IF
- switch - case
- while do-while for
- 数组
- 指针
- 结构体 枚举
- …
OC的关键字
OC支持C语言的所以的关键字.关键字在OC当中效果一样
==OC新增了一些关键字!!!==绝大部分都是以@开头的
总结
- OC相对于C做了两件事情.
- 将复杂的繁琐的语法封装的更为简单.
- 增加了面向对象的语法
==接下来的10天都是讲面向对象==��