01.Objective-C入门学习
目录介绍
- 01.理解C的超集
- 1.1 扩展名文件介绍
- 1.2 引入头文件
- 1.3 语法风格介绍
- 1.4 理解消息传递
- 02.oc如何编译
- 2.1 编译
- 2.2 链接
- 2.3 运行可执行文件
- 03.数据类型
- 3.1 整数类型
- 3.2 浮点数类型
- 3.3 字符类型
- 3.4 其他类型
- 3.5 NSString
01.理解C的超集
Objective-C 是c语言的超集——任何c语言程序可以不经修改直接通过 Objective-c编译器,在oc中使用c语言代码也是完全合法的。
因为objective-c贝描述为盖在c语言上的薄薄一层,因为objective-c的原意就是在c语言的主体上加入面向对象的特性。
1.1 扩展名文件介绍
- .h文件:头文件。
- .m文件:源代码文件,可以包含Objective-C 和 C的代码。
- .mm文件:源代码文件,可以包含Objective-C、C以及C++的代码。仅在需要使用C++特性时使用。
1.2 引入头文件
当你需要在源代码引用头文件时,你可以用#import,你也可以使用标准的 #include 编译选项,但是 Objective-C 提供了更好的方法。
#import 选项和 #include 选项完全相同,只是它可以确保相同的文件只会被包含一次。
Objective-C 的例子和文档都倾向于使用 #import,你的代码也应该是这样的。
1.3 语法风格介绍
Objective-C的面向对象语法源于Smalltalk消息传递风格。所有其他非面向对象的语法,包括变量类型,预处理器(preprocessing),流程控制,函数声明与调用皆与C语言完全一致。
但有些C语言语法合法代码在objective-c中表达的意思不一定相同,比如某些布尔表达式,在C语言中返回值为true,但在Objective-C若与yes直接相比较,函数将会出错,因为在Objective-C中yes的值只表示为1。
第一个oc语言程序:
#import <Foundation/Foundation.h>
Int main(int argc, char *argv[]) {
@autoreleasepool {
//@ 是为了和C字符串区分,表示NSString 字符串
NSLog(@“Hello World”);
}
return 0;
}
1.4 理解消息传递
消息传递:Objective-C的面向对象语法源于Smalltalk消息传递风格。
在objective-c里,与其说对象互相调用方法,不如说时互相发送消息精准。在oc环境中,类别与消息的关系比较松散,调用方法视为对对象发送消息,所有方法都被视为对消息的回应。
所有消息处理直到运行时(runtime)才会动态决定,并交由类别自行决定如何处理收到的消息。
也就是说,一个类别不保证一定会回应收到的消息,如果类别收到了一个无法处理的消息,程序只会抛出异常,不会出错或崩溃。
// c++对象调用方法
obj.method(argument);
// Objective-C消息传递,在oc中,发送一个消息给对象
[obj method:argument];
02.oc如何编译
2.1 编译
cc -c file.m -framework Foundation
- -c 表示编译
- file.m表示目标文件,可以列举多个,也可以用通配符表示 *.m
- -framework 之后列举所用到的标准库
2.2 链接
编译执行之后会在当前目录生成 file.o文件。
编译只是将我们自己写的代码变成了二进制形式,它还需要和系统组件(比如标准库、动态链接库等)结合起来,这些组件都是程序运行所必须的。
链接就是一个“打包”的过程,它将所有二进制形式的目标文件(.o)和系统组件组合成一个可执行文件。
cc file.o -framework Foundation
运行以上命令,链接程序,会生成a.out可执行文件,也可以用 -o 参数指定输出文件名
2.3 运行可执行文件
./a.out
也可以直接将编译和链接二合一,以下命令直接生成.out文件
cc file.m -framework Foundation
03.数据类型
在 Objective-C 中,基本数据类型与 C 语言类似。以下是一些常见的 Objective-C 基本数据类型:
3.1 整数类型
- NSInteger:带符号的整数,根据平台的不同可能为 32 位或 64 位。
- NSUInteger:无符号的整数,根据平台的不同可能为 32 位或 64 位。
- int:带符号的整数,默认为 32 位。
- unsigned int:无符号的整数,默认为 32 位。
- short:短整数,16 位。
- long:长整数,通常为 32 位,根据平台的不同可能为 32 位或 64 位。
- long long:长长整数,64 位。
3.2 浮点数类型
- CGFloat:浮点数,根据平台的不同可能为 float 或 double 类型。
- float:单精度浮点数,32 位。
- double:双精度浮点数,64 位。
3.3 字符类型
- char:字符类型,8 位。
- unsigned char:无符号字符类型,8 位。
- BOOL:布尔类型,只能取 YES 或 NO,实际上是 typedef 为 signed char。
3.4 其他类型
- void:空类型,用于表示无返回值或不带参数的函数。
- id:泛型指针类型,可以用于指向任意类型的对象。
- nil: 与null差不多
- SEL: 方法选择器
自定义数据类型:
- 自定义类:通过继承NSObject类来创建自己的类。
- 枚举:定义一组命名的整数常量。
- 结构体:定义包含多个变量的复合数据类型。
3.5 NSString
C语言的字符串存储方式是用字符数组存储,而OC设计了一个更加好用的用来存储字符串的类型——NSString。NSString类型的指针变量是专门用来存储OC字符串。
用 %@ 做占位符:
NSString *str = @"Yujq";
NSlog(@"hello! %@",str);