编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门

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 扩展名文件介绍

  1. .h文件:头文件。
  2. .m文件:源代码文件,可以包含Objective-C 和 C的代码。
  3. .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
  1. -c 表示编译
  2. file.m表示目标文件,可以列举多个,也可以用通配符表示 *.m
  3. -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 整数类型

  1. NSInteger:带符号的整数,根据平台的不同可能为 32 位或 64 位。
  2. NSUInteger:无符号的整数,根据平台的不同可能为 32 位或 64 位。
  3. int:带符号的整数,默认为 32 位。
  4. unsigned int:无符号的整数,默认为 32 位。
  5. short:短整数,16 位。
  6. long:长整数,通常为 32 位,根据平台的不同可能为 32 位或 64 位。
  7. long long:长长整数,64 位。

3.2 浮点数类型

  1. CGFloat:浮点数,根据平台的不同可能为 float 或 double 类型。
  2. float:单精度浮点数,32 位。
  3. double:双精度浮点数,64 位。

3.3 字符类型

  1. char:字符类型,8 位。
  2. unsigned char:无符号字符类型,8 位。
  3. BOOL:布尔类型,只能取 YES 或 NO,实际上是 typedef 为 signed char。

3.4 其他类型

  1. void:空类型,用于表示无返回值或不带参数的函数。
  2. id:泛型指针类型,可以用于指向任意类型的对象。
  3. nil: 与null差不多
  4. SEL: 方法选择器

自定义数据类型:

  1. 自定义类:通过继承NSObject类来创建自己的类。
  2. 枚举:定义一组命名的整数常量。
  3. 结构体:定义包含多个变量的复合数据类型。

3.5 NSString

C语言的字符串存储方式是用字符数组存储,而OC设计了一个更加好用的用来存储字符串的类型——NSString。NSString类型的指针变量是专门用来存储OC字符串。

用 %@ 做占位符:

NSString *str = @"Yujq";
NSlog(@"hello! %@",str);
贡献者: yangchong211