Objective-C简称Obj-C或者OC。
1)面向对象的C
- OC相对于C只是增加了一部分面向对象的方法;
- 将C的一些复杂的繁琐的语法封装的更为简单;
- OC完全兼容C语言;
后缀
- OC后缀.m m代表OC中最重要的一个机制--消息机制
- C 后缀.c
main函数
- 依然是程序的入口和出口
import指令
1).以#号开头,是1个预处理指令.
2).作用: 是#inlcude指令的增强版. 将文件的内容在预编译的时候拷贝写指令的地方.
3).增强: 同1个文件无论#import多少次,只会包含1次.
如果#include指令要实现这个效果 就必须要配合条件编译指令来实现.
而#import指令只需要直接包含就可以 其他什么都不用作.
- 简要原理: #import指令在包含文件的时候,底层会先判断这个文件是否被包含 如果被包含就会略过 否则才会包含.
2)
Foundation框架
这个框架中提供了一些最基础的功能 输入和输出. 一些数据类型.
Foundation.h的路径:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/Foundation.h
Foundation.h这个文件中包含了Foundation框架中的其他的所有的头文件.
所以,我们只要包含Foundation.h 就相当于包含了Foundation框架中所有的头文件.
那么Foundation框架中的所有的函数和类就可以直接使用.
NSLog
- NSLog 执行时间+程序名称+进程编号+内容
2021-07-21 09:50:35.230746+0800 TestOc[3720:35996] Hello, World!
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {//自动释放池
float f = 12.12f;
NSLog(@"Hello, World!--%f",f);
}
return 0;
}
NSString
NSString类型的指针变量,只能用来存储OC字符串的地址;
NSString 字符串常量必须使用一个@前缀;
(指针变量加星号)
注意:
- NSLog第一个参数是一个OC字符串,需要使用@前缀;
- NSLog输出OC字符串的值,使用占位符%@
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
NSString *str = @"张三";
NSLog(@"大家好,我叫%@",str);
return 0;
}
3)函数的定义与调用
#import <Foundation/Foundation.h>
void sayHI();
int main(int argc, const char * argv[]) {
sayHI();
return 0;
}
void sayHI(){
NSString *str = @"张三";
NSLog(@"大家好,我叫%@",str);
}
image.png
4)C与OC对比
1. OC程序的编译、链接和执行步骤和C语言基本一致;
以在终端中建立OC语言文件为例
- 在当前工作文件夹下,用touch命令建立一个.m的OC语言程序文件
- 在.m文件中写上符合OC语法规范的源代码
- 使用cc -c命令将源代码编译为目标文件.o文件
- 使用cc命令将.o文件链接源文件
与C语言略有不同,必须要告诉编译器去哪一个框架中找OC文件中使用的函数或者类 cc first.o -framework Foundation
2. OC和C各个阶段的后缀名对比
对比 | C | OC |
---|---|---|
源文件 | .c | .m |
目标文件 | .o | .o |
可执行文件 | .out | .out |
3. OC和C的数据类型对比
首先,OC中支持C语言中的所有的数据类型。
- 基本数据类型 (int double float char)
- 构造类型 (数组 结构体 枚举)
- 指针类型 (int* double* float* char*)
- 空类型 (void)
- typedef自定义类型
OC支持以上所有类型
另外,OC还建立了一些新的数据类型:
- BOOL类型--YES/NO
BOOL类型的本质是typedef signed char BOOL//有符号的char变量
进一步查看其定义内容会发现:
#define YES ((BOOL)1)
#define NO ((BOOL)0)
所以我们得知,YES实际上就时1,NO实际上就是0。
BOOL isOK = YES;
NSLog(@"%d", isOK);
//2021-07-21 09:59:40.066494+0800 TestOc[5004:50166] 1
- Boolean类型--true/false
Boolean类型的本质是typedef unsigned char Boolean;//无符号的char变量
#define true 1
#define false 0
所以我们得知,true实际上就时1,false实际上就是0。
Boolean isOK = true;
NSLog(@"%d", isOK);
//2021-07-21 10:05:29.350056+0800 TestOc[5758:57446] 1
- class 类
- id 万能指针
- nil 和C语言的NULL差不多
- SEL 方法选择器
- block 代码段
仅供个人学习使用
网友评论