-
Objective-C相对于C
a. 简称obj-c 或 oc
b. 是面向对象的c语言;本质是C语言,将C语言复杂的部分封装的更简单
c. 完全兼容c语言,所以可以直接写c语言C优势:
高级语言,可移植性高 -
OC程序的源文件的后缀名是.m,m代表message 代表oc中最重要的一个机制 消息机制
C程序的源文件后缀名是.c -
main函数仍然是OC程序的入口和出口
int类型的返回值 代表程序的结束状态
main函数的参数:仍然可以接收用户运行程序的时候传递数据给程序 -
#import
指令
a. 以#开头,是1个预处理指令
b. 作用:是#include指令的增强版,将文件的内容在预编译的时候拷贝到写指令的地方
c. 增强:同1个文件无论#import几次,只会包含1次
--------如果#include指令要实现这个效果 就必须配合条件编译指令来实现
--------而#import指令只要直接包含就可以 ,其他什么都不用作
d. 简要原理:#import指令在包含文件的时候,底层会先判断这个文件是否被包含,如果被包含就会略过 否则才会包含 -
框架
a. 是1个功能集
b. Foundation框架
-------提供了一些最基础的功能 输入和输出 ,一些数据类型
-------Foundation.h这个文件中包含了Foundation框架中其他所有的头文件,所以我们只要包含Foundation.h就相当于包含了Foundation框架中所有的头文件(自己制造静态库也是这样,弄一个.h文件暴露给外面,这个.h文件只是包含了其他所有的头文件)。那么Foundation框架中的所有的函数和类就可以直接使用 -
@autoreleasepool
自动释放池
可以将代码写在自动释放池,或直接将自动释放池删掉 不会有任何影响 -
NSLog函数
a.#import <Foundation/Foundation.h>
b. 作用:是printf函数的增强版,向控制台输出信息
c. 语法:NSLog(@"格式控制字符串",变量列表);
-------最简单的语法:NSLog(@"要输出的信息");
d. 增强:
--------输出一些调试相关信息:执行代码的时间、当前程序的名称、进程的编号PID、线程编号、输出的信息
--------会自动换行
--------OC中其实新增了一些数据类型,NSLog函数不仅可以输出C数据类型变量的值还可以输出OC新增的数据类型的变量值
e. 用法和printf函数差不多,一样可以输出变量的值,并且占位符的用法一样
f. 使用注意:
--------NSLog函数的第1个参数前面必须加1个@符号
--------如果手贱在字符串中末尾加了1个’\n’代表换行,那么函数自动换行功能就会失效 -
字符串
a. c语言的字符串的存储方式
--------使用字符数组存储
--------使用字符指针
b. OC中设计了1个更为好用的用来存储字符串的1个类型:NSString
--------NSString 类型的指针变量 专门用来存储OC字符串的地址
c. OC的字符串常量必须使用1个前缀@符号
--------"jack"
是1个C语言字符串
--------@"jack"
是1个OC字符串
--------NSString类型的指针变量,只能存储OC字符串的地址
--------NSString *str=@"jack";
e. NSLog函数的第1个参数是1个oc字符串,所以NSLog函数的第1个实参应该以@符号开头
--------如果要使用NSLog函数输出OC字符串的值,那么使用占位符%@ -
NS前缀
a. NextStep --> Cocoa --> Foundation框架之中 -
@符号
a. 作用:将C字符串转换为OC字符串
--------“jack” @“jack”
b. OC中绝大部分关键字都以@符号开头 -
注释
和C一样,分单行注释和多行注释 -
函数
与C一样,定义与调用 -
OC程序的编译、连接、执行
a. 在.m文件中写上符合OC语法规范的源代码
b. 使用编译器将源代码编译成目标文件xx.o
--------cc -c xx.m
--------预处理 检查语法 编译
c. 链接
-------cc xx.o
-------如果程序中使用到了框架中的函数或者类,那么在链接的时候,就必须告诉编译器去那1个框架中找这个函数或者类
--------cc xx.o -framework 框架名称
--------cc main.o -framework Foundation
--------程序中用到了那1个框架中的功能,那么就再这个地方告诉编译器
d. 链接成功以后,就会生成1个a.out可执行文件 执行就可以了
我们点击运行按钮,Xcode会帮我们干上面这些事情
e.OC程序和C程序各个阶段的后缀名对比
源文件 | 目标文件 | 可执行文件 | |
---|---|---|---|
c | .c | .o | .out |
oc | .m | .o | .out |
-
OC 中的数据类型
a. OC中支持c语言中的所有数据类型
-------基本数据类型:int double float char
-------构造类型:数组 结构体 枚举
-------指针类型:int *p1;
-------空类型:void
-------typedef自定义类型
b. BOOL类型(常用这个)
--------可以存储YES或NO中任意1个数据
--------一般情况下BOOL类型的变量用来存储条件表达式的结果,如果成立,结果是YES(注意是大写)
--------BOOL本质typedef signed char BOOL;
实际上BOOL类型的变量,是1个有符号的char变量
c. Boolean
--------可以存储true或false
--------一般情况下Boolean类型的变量用来存储条件表达式的结果,如果成立,结果是true
--------本质typedef unsigned char Boolean;
d. class类型 类
e. id类型 万能指针
f. nil 与NULL差不多
g. SEL 方法选择器
h. block 代码块 -
OC与C
OC支持c语言中的运算符,并且效果一致
OC支持控制语句,并且效果一致
OC支持关键字,并且效果一致,但新增了一些关键字
OC与C语言函数的定义和调用一样
OC语言完全兼容c语言,在oc中可以写任意的c代码,并且效果一致