OC基础-第1天

时间:2021-11-07 04:42:20

#pragma mark - Day01_01_OC语言的历史(了解)

1) Objective - C 是一门面向对象的高级语言

2) Objective - C 简称 obj - C  \  OC

3) OC 本质是还是C语言 ,是在C语言基础上加上了面向对象的部分,把C语言中复杂的、繁琐的语法封装的更为简单

4) OC完全兼容C,可以在任何位置写C语言的代码

#pragma mark - Day01_02_OC语言的发展现状(了解)

#pragma mark - Day01_03_OC的未来(了解)

1)苹果在2014年推出了swift语言,并且在2015年年底开源

2)swift未来会成为开发iOS程序的主流,但是需要一段时间,当前夯实以OC为主

#pragma mark - Day01_04_学习目标

#pragma mark - Day01_05_第一个OC程序

#pragma mark - Day01_06_OC的源文件后缀名和main函数

1) Objective - C 源文件的后缀名是 .m C语言程序源文件的后缀名是 .c

2) Objective - C 的入口依然是 main函数

参数  可以有也可以没有

返回值  0 正常结束

"拓展

补充  main函数默认两个参数 初始化值为0

#pragma mark - Day01_07_#import指令

1)以'#'开头,是一个预编译指令

2)#import 指令,是#include的增强版

3)作用:把指定的文件,拷贝到这个指令所在的地方,无论这个文件被#import多少次,最终只会拷贝一次

4)用法:

#import   ""  在项目当前目录中找

#import   <>  去编译器目录中找

#pragma mark - Day01_08_Foundation框架简要介绍

1)框架概念

类和函数的集合,用来处理相关的一类功能

2)Foundation框架

提供了OC中最基本的语法支持

3)使用

使用框架里的东西,必须先把框架的头文件导入

4)一般的框架都会提供一个和框架名称一样的.h,这个文件中包含了框架中所有头文件,我们只要导入这文件,就等价于导入了这个框架的所有文件

#pragma mark - Day01_09_NSLog函数

1)自动释放池 后续会讲

2)NSLog()函数,是Foundation框架中的一个函数

3)用法

NSLog(@“格式控制符”,变量列表);

4)输出内容

1. 输出时间

2. 项目名称

3. 进程id

4. 线程id

5. 要输出的内容

5)使用方式,与printf基本一样,但是可以自动换行

6)注意点

1. 第一个参数前面一定加上一个'@'符号

2. 如在结果加上\n,函数自动换行会失效

"拓展(可不补充)

补充NSLog局限性(打印C语言带汉语的字符串会出问题)

#pragma mark - Day01_10_NSString字符串

1)C语言字符串实现方式

1. 字符数组

2. 字符指针

2)OC 中的字符串存储使用NSSrting ,只能保存OC字符串

3)方式

声明: NSString *str;

OC 使用   @“”

C   使用    “”

4)注意

1. NSLog函数使用的是OC字符串,所以要加上@

2. OC字符串对应得格式占位符是%@

#pragma mark - Day01_11_OC的其他基础语法

1) NS前缀

NextStep --> cocoa --> NS

2) @符号

1. 将C字符串转换为OC字符串  @"jack"

2. OC在C的基础之上,新增了一些关键字.新增的这些关键字大部分都是以@符号开头.

3) 注释.

单行注释 //

多行注释 /* */

文档注释 /** */

vvdocumenter

4) OC中也可以定义函数.并且定义的方式一模一样.

#pragma mark - Day01_12_OC程序的编译链接流程(了解)

1. 创建1个.m的源文件.

2. 在这个文件中写上符合OC语法规范的源代码.

3. 编译.

a. 预编译: 执行预处理代码.

b. 检查语法.

c. 生成目标文件. .o的目标文件. object

4. 链接.

a. 添加启动代码.

b. 链接函数.

如果代码中使用到了框架中的功能.那么在链接的时候,就必须要告诉编译器去哪个框架中找这些函数.

cc xx.o -framework 框架名称

2) 和C程序各个阶段的文件后缀名对比.

源文件     目标文件       可执行文件

C语言   .c        .o             .out

OC语言  .m        .o             .out

#pragma mark - Day01_13_BOOL类型变量

1) OC支持C语言中的所有的数据类型.

1. 基本数据类型

2. 构造类型

数组.

结构体

枚举.

3. 指针.

4. typedef定义类型.

5. void空类型.

2) BOOL类型

1. 取值 YES 、 NO

2. 表示条件表达式结果,成立是YES 不成立是NO

3. 本质

typedef signed char BOOL;

实际上是1个有符号的char变量.

YES和NO的本质

” #define YES ((BOOL)1)

” #define NO  ((BOOL)0)

3) BOOL类型使用 "%d" 打印

#pragma mark - Day01_14_Boolean类型

这个类型的变量只能存储true或者false这两个数据.

代表1个条件表达式的结果.

一般情况下.Boolean类型的变量用来保存1个条件表达式的结果.

如果条件成立,那么结果就是true 否则结果就是false.

Boolean的本质

typedef unsigned char    Boolean;

是1个无符号的char变量.

true和false的本质.

”#define true 1

”#define false 0

#pragma mark - Day01_15_OC新增的数据类型

1) BOOL 类型

2) Boolean 类型

3) class 类型

4) nil 类型

5) SEL 类型

6) block 类型

#pragma mark - Day01_16_OC和C的对比

1) OC的运算符: OC支持C的所有的运算符.

1. 赋值运算符.

2. 算术运算符

3. 复合赋值运算符

4. 自增与自减运算符

5. 逗号运算符

6. 关系运算符  比较运算符

7. 逻辑运算符

8. 三元运算符

9. & 取地址运算符.

10. * 指针访问运算符.

11. 位运算符.

2) OC的控制语句: OC支持C的所有的控制语句.

1. IF

2. switch-case

3. while  do-while  for

4. 数组.

5. 指针.

6. 结构体 枚举

3) OC的关键字

1. OC支持C语言的所有的关键字. 并且效果是一样的.

2. OC在C的基础之上还新增了一些关键字.OC中新增的关键字绝大部分都是以@开头.

@interface

@implementation

@public

@protocol

4) OC相对于C做了两件事情.

1). 将C语言中复杂的 繁琐的语法封装的更为简单.

2). 增加了面向对象的语法.

#pragma mark - Day01_17_面向过程与面向对象(重点)

1)面向过程

在解决一个问题时,每一个步骤都自己去实现。这样的思路,我们叫面向过程。

2)面向对象

在解决一个问题时,自己没有必要去做,可以找合适的人或物来处理。这样的思路我们叫面向对象。

面向过程与面向对象是解决同1个问题的不同的思路而已.

1. 面向过程的解决问题的思路.

解决这个问题的每1个步骤,都是我自己亲自去实现

2. 面向对象的解决问题的思路.

自己不要去亲自做,而是找1个专门做这个事情的人来帮我做.找专门的人做专业的事情.

#pragma mark - Day01_18_代码世界中的面向过程与面向对象(重点)

1)面向过程

实现一个需求,每一个步骤都一步一步来实现,这种方式叫面向过程

2)面向对象

实现一个功能,找一个专门处理这个功能的对象来实现这个功能。这种方式叫面向对象

#pragma mark - Day01_19_面向过程与面向对象的优缺点分析(重点)

1). 面向过程:

C语言就是1门面向过程的语言.

缺点: 一旦需求发生变化.就要重新来. 就要把代码推倒重新来.

C语言中有函数.函数与函数之间是相互独立的. 没有人的概念.

2). 面向对象:

OC语言就是1门面向对象的语言.

优势: 后期的维护和修改非常的方便 需求变化,大不了我重新换人.

人: 1个人可以有与之相关的很多的功能.

3) 如何使用面向对象来解决问题.

1. 当你遇到1个需求的时候,千万要记住,不要自己1步1步去实现.

2. 框架.框架中就有很多人在里面听你的召唤.不同的框架中,预置了很多可以做不同事情的人. 类.

3. 首选,先去找预置的框架中是否有专门做这个事情的人.如果有,直接喊过来用

4. 如果没有.就自己造1个可以实现这个需求的人.自己造的话.不仅现在可以用这个人,并且以后也可以使用.

#pragma mark - Day01_20_什么是类和对象(较难)

1)对象

定义:对象是现实生活中的具体存在事物

世间万物皆对象 。

特点:看得见,摸的着,拿过来就可以用

2)类

定义:对某些具有相同特征和行为的事物的统称

特点:抽象的.不能直接使用.

#pragma mark - Day01_21_类与对象之间的关系

1)类和对象的关系

对象是1类事物中的1个具体存在

例:

类是制造月饼的模子,模子不能吃,所以类是不能用的.对象是根据这个模子制造出来的月饼.模子上有什么,月饼上就有什么,不会多也不会少.月饼可以吃,所以对象可以用. 所以,类模板中有什么,根据这个类模板创建出来的对象中就有什么不会多也不会少.

#pragma mark - Day01_22_如何设计类 (重要)

1) 作用

用来描述1群具有相同特征和行为的事物的.

2) 设计类的三要素.

这类事物的名称

这类事物具有的共同的特征.

这类事物具有的共同的行为.

3). 如何找类?

名词提炼法: 就是分析整个业务流程中出现了哪些名词,这些名词就是类.

然后根据类的三要素.来分析这些类有哪些特征和行为.

#pragma mark - Day01_23_如何定义一个类

1) 作用

用代码来描述1群具有相同特征和行为的事物的.

2) 设计类的三要素.

类名

特征

行为

3). 定义1个类的语法

1.  定义类的位置.

应该写在main函数的外面,直接写在源文件下.

2.  在OC中创建1个类,需要两个步骤.

'a. 类的声明

@interface 类名 : NSObject

{

这类事物具有的相同的特征.

把这些特征定义为1个1个的变量.

数据类型1 变量名1;

数据类型2 变量名2;

.......

}

写上这类事物具有的共同的行为,用方法表示.

方法的声明.

@end

'b. 类的实现.

@implementation 类名

方法的实现.

@end

3. 需要注意的是.

类所具备的共同的特征,应该是以变量的形式声明在@interface的大括弧之中.

4) 注意点

a. 类必须要有声明和实现. 声明和实现必须同时有.

b. 类名 这个类是来描述那1类事物的,直接使用这类事物的名称当做这个类的名称.

类名的每1个单词的首字母大写.

c. 在写类的时候.类名不能和框架中的类的名字冲突.

为了防止命名冲突,我们建议为我们的类加1个前缀.

d. 冒号后面的NSObject 不要去管什么意思. 照写就可以了.

e. 用来表示这类事物具有的共同的特征的变量,应该定义在@interface的大括弧中.

这些变量: 特征、属性、成员变量、实例变量、字段、实例字段.

f. 属性名称必须要以_开头.

这是规范.虽然你不遵守是可以的.但是后面的一些知识点都是以属性名下划线开头为前提的.

#pragma mark - Day01_01_OC语言的历史(了解)

1) Objective - C 是一门面向对象的高级语言

2) Objective - C 简称 obj - C  \  OC

3) OC 本质是还是C语言 ,是在C语言基础上加上了面向对象的部分,把C语言中复杂的、繁琐的语法封装的更为简单

4) OC完全兼容C,可以在任何位置写C语言的代码

#pragma mark - Day01_02_OC语言的发展现状(了解)

#pragma mark - Day01_03_OC的未来(了解)

1)苹果在2014年推出了swift语言,并且在2015年年底开源

2)swift未来会成为开发iOS程序的主流,但是需要一段时间,当前夯实以OC为主

#pragma mark - Day01_04_学习目标

#pragma mark - Day01_05_第一个OC程序

#pragma mark - Day01_06_OC的源文件后缀名和main函数

1) Objective - C 源文件的后缀名是 .m C语言程序源文件的后缀名是 .c

2) Objective - C 的入口依然是 main函数

参数  可以有也可以没有

返回值  0 正常结束

"拓展

补充  main函数默认两个参数 初始化值为0

#pragma mark - Day01_07_#import指令

1)以'#'开头,是一个预编译指令

2)#import 指令,是#include的增强版

3)作用:把指定的文件,拷贝到这个指令所在的地方,无论这个文件被#import多少次,最终只会拷贝一次

4)用法:

#import   ""  在项目当前目录中找

#import   <>  去编译器目录中找

#pragma mark - Day01_08_Foundation框架简要介绍

1)框架概念

类和函数的集合,用来处理相关的一类功能

2)Foundation框架

提供了OC中最基本的语法支持

3)使用

使用框架里的东西,必须先把框架的头文件导入

4)一般的框架都会提供一个和框架名称一样的.h,这个文件中包含了框架中所有头文件,我们只要导入这文件,就等价于导入了这个框架的所有文件

#pragma mark - Day01_09_NSLog函数

1)自动释放池 后续会讲

2)NSLog()函数,是Foundation框架中的一个函数

3)用法

NSLog(@“格式控制符”,变量列表);

4)输出内容

1. 输出时间

2. 项目名称

3. 进程id

4. 线程id

5. 要输出的内容

5)使用方式,与printf基本一样,但是可以自动换行

6)注意点

1. 第一个参数前面一定加上一个'@'符号

2. 如在结果加上\n,函数自动换行会失效

"拓展(可不补充)

补充NSLog局限性(打印C语言带汉语的字符串会出问题)

#pragma mark - Day01_10_NSString字符串

1)C语言字符串实现方式

1. 字符数组

2. 字符指针

2)OC 中的字符串存储使用NSSrting ,只能保存OC字符串

3)方式

声明: NSString *str;

OC 使用   @“”

C   使用    “”

4)注意

1. NSLog函数使用的是OC字符串,所以要加上@

2. OC字符串对应得格式占位符是%@

#pragma mark - Day01_11_OC的其他基础语法

1) NS前缀

NextStep --> cocoa --> NS

2) @符号

1. 将C字符串转换为OC字符串  @"jack"

2. OC在C的基础之上,新增了一些关键字.新增的这些关键字大部分都是以@符号开头.

3) 注释.

单行注释 //

多行注释 /* */

文档注释 /** */

vvdocumenter

4) OC中也可以定义函数.并且定义的方式一模一样.

#pragma mark - Day01_12_OC程序的编译链接流程(了解)

1. 创建1个.m的源文件.

2. 在这个文件中写上符合OC语法规范的源代码.

3. 编译.

a. 预编译: 执行预处理代码.

b. 检查语法.

c. 生成目标文件. .o的目标文件. object

4. 链接.

a. 添加启动代码.

b. 链接函数.

如果代码中使用到了框架中的功能.那么在链接的时候,就必须要告诉编译器去哪个框架中找这些函数.

cc xx.o -framework 框架名称

2) 和C程序各个阶段的文件后缀名对比.

源文件     目标文件       可执行文件

C语言   .c        .o             .out

OC语言  .m        .o             .out

#pragma mark - Day01_13_BOOL类型变量

1) OC支持C语言中的所有的数据类型.

1. 基本数据类型

2. 构造类型

数组.

结构体

枚举.

3. 指针.

4. typedef定义类型.

5. void空类型.

2) BOOL类型

1. 取值 YES 、 NO

2. 表示条件表达式结果,成立是YES 不成立是NO

3. 本质

typedef signed char BOOL;

实际上是1个有符号的char变量.

YES和NO的本质

” #define YES ((BOOL)1)

” #define NO  ((BOOL)0)

3) BOOL类型使用 "%d" 打印

#pragma mark - Day01_14_Boolean类型

这个类型的变量只能存储true或者false这两个数据.

代表1个条件表达式的结果.

一般情况下.Boolean类型的变量用来保存1个条件表达式的结果.

如果条件成立,那么结果就是true 否则结果就是false.

Boolean的本质

typedef unsigned char    Boolean;

是1个无符号的char变量.

true和false的本质.

”#define true 1

”#define false 0

#pragma mark - Day01_15_OC新增的数据类型

1) BOOL 类型

2) Boolean 类型

3) class 类型

4) nil 类型

5) SEL 类型

6) block 类型

#pragma mark - Day01_16_OC和C的对比

1) OC的运算符: OC支持C的所有的运算符.

1. 赋值运算符.

2. 算术运算符

3. 复合赋值运算符

4. 自增与自减运算符

5. 逗号运算符

6. 关系运算符  比较运算符

7. 逻辑运算符

8. 三元运算符

9. & 取地址运算符.

10. * 指针访问运算符.

11. 位运算符.

2) OC的控制语句: OC支持C的所有的控制语句.

1. IF

2. switch-case

3. while  do-while  for

4. 数组.

5. 指针.

6. 结构体 枚举

3) OC的关键字

1. OC支持C语言的所有的关键字. 并且效果是一样的.

2. OC在C的基础之上还新增了一些关键字.OC中新增的关键字绝大部分都是以@开头.

@interface

@implementation

@public

@protocol

4) OC相对于C做了两件事情.

1). 将C语言中复杂的 繁琐的语法封装的更为简单.

2). 增加了面向对象的语法.

#pragma mark - Day01_17_面向过程与面向对象(重点)

1)面向过程

在解决一个问题时,每一个步骤都自己去实现。这样的思路,我们叫面向过程。

2)面向对象

在解决一个问题时,自己没有必要去做,可以找合适的人或物来处理。这样的思路我们叫面向对象。

面向过程与面向对象是解决同1个问题的不同的思路而已.

1. 面向过程的解决问题的思路.

解决这个问题的每1个步骤,都是我自己亲自去实现

2. 面向对象的解决问题的思路.

自己不要去亲自做,而是找1个专门做这个事情的人来帮我做.找专门的人做专业的事情.

#pragma mark - Day01_18_代码世界中的面向过程与面向对象(重点)

1)面向过程

实现一个需求,每一个步骤都一步一步来实现,这种方式叫面向过程

2)面向对象

实现一个功能,找一个专门处理这个功能的对象来实现这个功能。这种方式叫面向对象

#pragma mark - Day01_19_面向过程与面向对象的优缺点分析(重点)

1). 面向过程:

C语言就是1门面向过程的语言.

缺点: 一旦需求发生变化.就要重新来. 就要把代码推倒重新来.

C语言中有函数.函数与函数之间是相互独立的. 没有人的概念.

2). 面向对象:

OC语言就是1门面向对象的语言.

优势: 后期的维护和修改非常的方便 需求变化,大不了我重新换人.

人: 1个人可以有与之相关的很多的功能.

3) 如何使用面向对象来解决问题.

1. 当你遇到1个需求的时候,千万要记住,不要自己1步1步去实现.

2. 框架.框架中就有很多人在里面听你的召唤.不同的框架中,预置了很多可以做不同事情的人. 类.

3. 首选,先去找预置的框架中是否有专门做这个事情的人.如果有,直接喊过来用

4. 如果没有.就自己造1个可以实现这个需求的人.自己造的话.不仅现在可以用这个人,并且以后也可以使用.

#pragma mark - Day01_20_什么是类和对象(较难)

1)对象

定义:对象是现实生活中的具体存在事物

世间万物皆对象 。

特点:看得见,摸的着,拿过来就可以用

2)类

定义:对某些具有相同特征和行为的事物的统称

特点:抽象的.不能直接使用.

#pragma mark - Day01_21_类与对象之间的关系

1)类和对象的关系

对象是1类事物中的1个具体存在

例:

类是制造月饼的模子,模子不能吃,所以类是不能用的.对象是根据这个模子制造出来的月饼.模子上有什么,月饼上就有什么,不会多也不会少.月饼可以吃,所以对象可以用. 所以,类模板中有什么,根据这个类模板创建出来的对象中就有什么不会多也不会少.

#pragma mark - Day01_22_如何设计类 (重要)

1) 作用

用来描述1群具有相同特征和行为的事物的.

2) 设计类的三要素.

这类事物的名称

这类事物具有的共同的特征.

这类事物具有的共同的行为.

3). 如何找类?

名词提炼法: 就是分析整个业务流程中出现了哪些名词,这些名词就是类.

然后根据类的三要素.来分析这些类有哪些特征和行为.

#pragma mark - Day01_23_如何定义一个类

1) 作用

用代码来描述1群具有相同特征和行为的事物的.

2) 设计类的三要素.

类名

特征

行为

3). 定义1个类的语法

1.  定义类的位置.

应该写在main函数的外面,直接写在源文件下.

2.  在OC中创建1个类,需要两个步骤.

'a. 类的声明

@interface 类名 : NSObject

{

这类事物具有的相同的特征.

把这些特征定义为1个1个的变量.

数据类型1 变量名1;

数据类型2 变量名2;

.......

}

写上这类事物具有的共同的行为,用方法表示.

方法的声明.

@end

'b. 类的实现.

@implementation 类名

方法的实现.

@end

3. 需要注意的是.

类所具备的共同的特征,应该是以变量的形式声明在@interface的大括弧之中.

4) 注意点

a. 类必须要有声明和实现. 声明和实现必须同时有.

b. 类名 这个类是来描述那1类事物的,直接使用这类事物的名称当做这个类的名称.

类名的每1个单词的首字母大写.

c. 在写类的时候.类名不能和框架中的类的名字冲突.

为了防止命名冲突,我们建议为我们的类加1个前缀.

d. 冒号后面的NSObject 不要去管什么意思. 照写就可以了.

e. 用来表示这类事物具有的共同的特征的变量,应该定义在@interface的大括弧中.

这些变量: 特征、属性、成员变量、实例变量、字段、实例字段.

f. 属性名称必须要以_开头.

这是规范.虽然你不遵守是可以的.但是后面的一些知识点都是以属性名下划线开头为前提的.