IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 读书笔记——《Effecitve Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》 -> 正文阅读

[移动开发]读书笔记——《Effecitve Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》

写在前面

这本书对于iOS开发者来说,并不是一本入门书籍,尽管这本书很薄,但是书中罗列的52条编程技巧,如果没有iOS的开发基础的话,阅读起来也并不容易。它是很适合iOS开发从初级迈向中高级的一本书,讲解了一些我平时在做iOS开发时,容易忽略的一些细节
我目前也是在iOS开发的初级阶段,因此对书笔记中会加入很多外部链接和一些我自己的理解,帮助更好的学习OC

第一条:了解Objective-C的起源

  • Objective-C语言由Smalltalk演化而来,Smalltalk是消息型语言的鼻祖
  • 关于消息型语言和函数调用语言的区别
    消息型语言:其运行时所应执行的代码由运行环境来决定,消息结构语言在运行时才会去查找所要执行的方法(对运行时的解释:编译器甚至不关心消息的对象是何种类型,接受消息的对象问题也要在运行时处理——即动态绑定)
    函数调用语言:其运行时所应执行的代码由编译器决定,函数调用语言要按照虚方法表来查出到底应该执行哪个函数实现(虚方法表是编程语言为了实现动态派发/运行时方法绑定的一种机制)
  • Objective-C的重要工作都由“运行期组件(runtime component)”而非编译器完成
  • 运行期组件(runtime component):其本质上是一种与开发者编写的代码相链接的动态库,能够将开发者编写的代码粘合起来

从网上摘录的一段话,帮助更好的理解Runtime:
Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制。而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库。它是 Objective-C 面向对象和动态机制的基石。
像 Objective-C 这种高级编程语言想要成为可执行文件需要先编译为汇编语言再汇编为机器语言,机器语言也是计算机能够识别的唯一语言,但是 Objective-C 并不能直接编译为汇编语言,而是要先转写为纯 C 语言再进行编译和汇编的操作,从 OC 到 C 语言的过渡就是由 runtime 来实现的。然而我们使用 OC 进行面向对象开发,而 C 语言更多的是面向过程开发,这就需要将面向对象的类转变为面向过程的结构体

  • Objective-C是C语言的超集,因此C语言中所有的功能在编写OC代码时依然适用
  • 理解C语言的内存模型,有助于理解OC的内存模型和引用计数机制的工作原理
  • OC语言中使用指针指向对象,NSString* someString = @"The string";,所有OC语言中的对象都必须这样声明,因为对象所占的内存总是分配在堆空间中,不会分配在栈上,因此需要使用指针。分配在堆中的内存需要直接管理(手动管理),而分配在栈上的内存会在其栈帧弹出时自动清理(自动管理)
  • OC指针在内存中的示例
NSString* someString = @"The string";
NSString* anotherString = someString;
解释:有两个指针变量指向此实例,两个变量都是NSString*类型,这说明当前栈帧里分配了两块内存,每块内存的大小都能容下一枚指针(32位架构的计算机占4字节,在64位架构的计算机占8字节)

内存模型的图待补充

  • OC和C:在OC代码中,有时会遇到定义里不含*的变量,它们可能会使用栈空间,这些变量所保存的不是OC对象,例如CGRect就是C的结构体;如果改用OC对象的话,会消耗更多的性能,占用更多的内存
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:41:20  更:2022-02-28 15:44:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:56:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码