- 博客(83)
- 收藏
- 关注
原创 【iOS】Block底层分析
Block在iOS开发中极为重要,非常适合处理异步操作、回调、集合操作等场景,本文重点学习Block的底层结构、内存管理、变量捕获、相关修饰符和循环引用解决方案
2024-08-18 22:44:29
848
1
原创 【iOS】AutoreleasePool自动释放池的实现原理
本文简单回顾了ARC与MRC,分析了autoreleasePool的实现原理,总结了其源码流程
2024-08-07 22:29:42
978
原创 【iOS】OC关键字总结及底层原理(上)
此文总结了线程安全和作用域相关的关键字,主要分析了内存管理相关关键字(retain、assign、copy、strong、weak)的源码流程,总结了内存管理的方法,回顾了引用计数器SideTable、深浅拷贝
2024-08-06 17:32:24
885
原创 【iOS】SideTable
本文分析了SideTable的结构,其中包含引用计数器RefcountMap、弱引用功能实现的核心数据结构weak_table
2024-08-05 11:29:49
1229
原创 (数据结构)散列表笔记
不管采用哪种探测方法,当散列表中空闲位置不多的时候,散列冲突的概率就会大大提高。为了尽可能保证散列表的操作效率,一般情况下,我们会尽可能保证散列表中有一定比例的空闲槽位。我们用装载因子(load factor)来表示空位的多少散列表的装载因子表中的元素个数÷表的长度散列表的装载因子 = 表中的元素个数 ÷ 表的长度散列表的装载因子表中的元素个数÷表的长度装载因子越大,说明空闲位置越少,冲突越多,散列表的性能会下降。
2024-08-03 09:05:27
486
原创 【iOS】线程同步&读写安全技术(锁、信号量、同步串行队列)
本文认识了多线程共享资源的安全隐患,同时学习了许多解决方案,比如锁、GCD、信号量,并对比了他们的性能和使用区别,还了解了读写安全隐患,并使用pthread或异步栅栏函数解决多读单写
2024-07-31 01:00:10
716
原创 【iOS】GCD
iOS开发中较为常用的多线程编程技术——GCD。学习了任务、队列、同步与异步、串行与并行的理解,以及GCD各种APIAPI的应用
2024-07-24 20:06:48
902
原创 【iOS】进程与多线程
iOS开发是单进程,本文针对iOS开发对多线程作以了解,并区分了进程、线程之间的区别和意义,认识了线程的生命周期、线程池的运行策略、简单了解了自旋锁和互斥锁,浅析了atomic原子属性的底层实现是通过自旋锁实现的
2024-07-23 14:48:15
1018
原创 【iOS】编译链接
编译链接是一iOS文件从开始到变成可执行的文件的过程,我们不去研究原理,但是对于整个流程的掌握还是很有必要的,想究其底层原理,文章内有贴学习链接
2024-07-22 20:43:01
635
原创 【iOS】内存对齐
内存对齐可以提高CPU的存取效率同时提升安全性,会有部分内存的浪费,但是系统又会根据数据存储情况进行内存优化,尽可能降低内存浪费,这样即保证了性能又减少了浪费
2024-07-22 11:45:20
820
原创 【iOS】Tagged Pointer
Tagged Pointer需要注意的点真多,花了两天时间学习~为了节省内存和提高执行效率,苹果提出了Tagged Pointer的概念。对于64位程序,引入Tagged Pointer后,相关逻辑能减少一半的内存占用,以及3倍的访问速度提升,100倍的创建、销毁速度提升
2024-07-22 11:44:39
855
原创 C++入门语法总结和STL回顾
总结了用Cpp写算法题时常用的STL数据结构,比如vector、string、set、map、stack、queue和list,并回顾了C++面向对象的一些基础语法
2024-07-22 09:19:20
951
原创 【iOS】isMemberOfClass&isKindOfClass
对NSObject API中的两个方法 isKindOfClass 和 isMemberOfClass 的实现进行了分析,分别从底层源码和调用结果两个角度验证
2024-07-20 16:00:43
1351
原创 【iOS】static、extern、const、auto关键字以及联合使用
本文详细认识了static、extern以及const关键字的特点和用法,还有他们联合使用的效果,简单认识了auto关键字
2024-07-19 22:00:22
1080
原创 【iOS】内存五大分区
本文认识了计算机RAM内存的五大分区,分析了每个区域的特性和优缺点,并将iOS内存与其他系统进行了区分,总结了堆栈结构、函数栈以及堆栈的联系与区别
2024-07-19 11:18:28
1291
原创 【iOS】类对象的结构分析
本文认识了实例对象、类对象和元类对象三种不同对象之间的联系,了解了一些获取类信息的Runtime API,分析了isa&superclass的指向流程,探究了类的底层结构,并解读其源码,包括属性、对象方法、协议、实例变量以及类方法等信息的存储方式
2024-07-17 20:45:30
1469
原创 【iOS】OC类与对象的本质分析
本文对OC类与对象的本质进行了分析,学习了常用的clang命令,介绍了如何使用LLDB和ViewMemory查看对象的内存大小,简单了解了大小端,并探究了isa指针的源码。
2024-07-16 16:40:02
1174
原创 【iOS】KVO相关总结
本篇文章了解了 KVO 机制的进阶使用、使用规范和本质原理。KVO的全称是Key-Value Observing,即键值监听或键值观察,用于监听某个对象属性值的改变KVO是苹果提供的一套事件通知机制(其声明全部在Foundation框架中的里),允许一个对象监听另一个对象指定属性值的改变。当被观察对象属性值发生改变时,会触发KVO的监听方法来通知观察者因为KVO接口声明是,即给NSObject添加的分类Category,所以大多数对象都可以键值观察或键值监听。
2024-06-14 22:07:23
853
原创 【iOS】KVC相关总结
这篇文章总结了 KVC 的进阶使用,包括访问对象、集合、非对象、集合运算符号以及KVC设值和取值原理,还有异常处理调用的应用
2024-06-13 23:03:20
983
2
原创 【iOS】MRC下的单例模式&批量创建单例
最近正在接触MRC,顺带了解了一下MRC下是如何手动管理资源的创建与释放来实现单例的,并且学习了如何简洁地批量创建单例对象。
2024-06-08 00:18:06
1239
1
原创 【iOS】内存泄漏检查及原因分析
迅速膨胀的内存可以很快让程序毙命,所以要多加防范。即使有 ARC(自动引用计数)内存管理机制,但在现实中对象之间引用复杂,循环引用导致的内存泄漏仍然难以避免,所以关键时刻还要自力更生。分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的。开启了ARC并不是就不会存在内存问题,苹果有句名言:ARC is only for NSObject。使用ARC的项目,一般内存泄漏都是 malloc、自定义结构、资源引起的,多注意这些地方进行分析。
2024-06-05 00:07:12
1527
原创 【iOS】didReceiveMemoryWarning实例方法
iPhone下每个App可用的内存是被限制的,如果一个App使用的内存超过20M,则系统会向该App发送(内存警告)消息,收到此消息后,App必须正确处理,否则可能出错或出现内存泄漏。且对相关方法loadView/viewDidLoad/viewDidUnload/initWithNib/initWithCoder:进行了总结。
2024-05-28 21:51:29
1316
1
原创 Lookin高效调试iOS App的UI
Lookin 可以查看与修改 iOS App 里的 UI 对象,类似于 Xcode 自带的 UI Inspector 工具,或另一款叫做 Reveal 的软件。
2024-05-26 23:36:25
1479
原创 《Effective Objective-C 2.0》读书笔记——协议与分类
协议(protocol)和分类(category)是OC的两个重要的语言特性。理解并运用得当,可令代码易读、易维护且少出错。
2024-05-24 11:04:21
423
原创 《Effective Objective-C 2.0》读书笔记——接口与API设计
在构建应用程序时,可能会将其中的代码用在后续项目或供他人集成在别的项目,因此,很少有那种写完就不再复用的代码。编写接口时就会将其设计成易于复用的形式,这需要用到OC语言中常见的编程范式(paradigm),同时还需了解各种可能碰到的陷阱。
2024-05-24 11:02:16
687
原创 《Effective Objective-C 2.0》读书笔记——对象、消息、运行期
对象之间能够关联与交互,这是面向对象语言的重要特征。本章讲述这些特,并深入研究代码在运行期的行为。Runtime就是为程序运行起来后提供相关支持的代码,它提供了一些使得对象之间能够传递消息的重要函数,并且包含创建类实例所用的全部逻辑。
2024-05-23 20:40:56
1419
原创 《Effective Objective-C 2.0》读书笔记——熟悉Objective-C
Objective-C在C语言基础上添加了面向对象特性,代码十分易读,但仍有许多微妙细节需要注意,而且还有许多容易为人所忽视的特性。另一方面,有些开发者并未完全理解或是容易滥用某些特性,导致写出来的代码难于维护且不易调试。
2024-05-23 19:43:31
1482
原创 【C语言】位域(位段、位字段)
位域是C语言中乏人问津的特性,是一种数据结构,其主要作用是调整成员变量的位置,而且是OC委托模式中缓存方法响应能力的最佳途径,故作此篇了解!
2024-05-22 16:34:09
1036
原创 Blocks —— 《Objective-C高级编程 iOS与OS X多线程和内存管理》
Block相关知识以及Block在OC中的使用分析,了解了一点C++的特有功能
2024-03-17 20:20:25
3484
2
原创 【iOS】UICollectionView使用
总结了UICollectioinView的基本使用、参差瀑布流式和圆环式布局。其实算是特殊Flow布局的UITableView,但简单的列表仍可以使用UITableViewUICollectionView最大的优势就是通过自定义Layout,实现cell的布局,整体的思路就是:通过一些几何计算,设置好每个item的布局位置和大小一篇较为详细的 UICollectionView 使用方法总结
2024-01-21 20:09:56
2051
原创 【iOS】UIColor、CGColor、CIColor的区别和联系
UIColor是UIKit中用于表示颜色的类,一个UIColor对象包含了颜色和透明度的值,可以用来表示不同颜色空间(RGB、HSB)的颜色。UIColor提供了各种便捷的方法创建和管理颜色,正如上面提到的,可以使用与定义的颜色常量,也可以使用RGB或HSB的值来自定义颜色。CGColor是Core Graphics框架(Apple的绘图框架)中用于表示颜色的数据类型,本质是一个结构体,是一种低级的颜色表示方式,更接近图形底层,提供了底层的图形渲染和绘制功能。CGColor实际上是指向CGColorRef的
2024-01-14 15:12:10
1378
原创 【iOS】数据存储方式总结(持久化)沙盒结构
在iOS开发中,我们经常性地需要存储一些状态和数据,比如用户对于App的相关设置、需要在本地缓存的数据等等,本篇文章将介绍六个主要的数据存储方式。在研究存储方式之前,我们有必要先研究一下这些文件会存储到什么地方,这就需要我们了解iOS App特有的沙盒机制
2024-01-12 16:30:24
1738
2
原创 【iOS】数据持久化(四)之FMDB基本使用
FMDB是iOS开发中的一个轻量级第三方数据库框架,它以OC的方式封装了SQLite的C语言接口,省去了冗余的C语言代码,且更加面向对象,操作方便FMDatabase:此类的一个实例代表一个SQLite数据库,也有许多执行SQL语句的方法FMResultSet(结果集):使用FMDatabase执行SQLite查询语句后的结果集FMDatabaseQueue(数据库队列):用于在多线程中执行多个查询或更新,它是线程安全的。
2024-01-12 16:17:32
1630
2
原创 【SQLite】SQLite3约束总结
约束是在数据库表中的某列字段上强制执行的规则,用以限制插入表中的数据类型,确保数据库中的数据的准确性和可靠性约束分为列级约束和表级约束,前者适用于列,后者应用于整个表。什么是约束NOT NULL 约束DEFAULT约束UNIQUE约束PRIMARY KEY约束CHECK约束删除约束
2023-12-02 21:56:17
1755
原创 【iOS】数据持久化(三)之SQLite3数据库
本文介绍SQLite的使用 数据库(Database)是根据数据结构来组织、存储和管理数据的仓库数据库大致分为两种:关系型数据库(主流)、对象型数据库SQLite。本文总结了在iOS开发中用OC语言如何去使用SQLite数据库,介绍了SQLite相关函数,以及SQLite的基本语句iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦,于是就出现了一系列将SQLite封装的库:CoreData(Apple官方)、FMDB(第三方),后
2023-12-02 16:51:32
2095
1
原创 【iOS】数据持久化(二)之归档和解档(iOS 13以后)
简单对比了MJExtension、JSONModel和YYModel第三方库在iOS中,对象的序列化和反序列化分别使用和两个类,我们可以把一个类对象进行序列化然后保存到文件中,使用时再读取文件,把内容反序列化出来。这个过程通常也被称为对象的编码(归档)和解码(解档)归档一般保存自定义对象、自定义对象数组,由于自定义对象不具有归档的性质,所以只有遵循了NSCoding协议的类才可以归档。
2023-11-23 22:31:13
1916
原创 【iOS】数据持久化(一)之Plist文件、Preference(NSUserDefaults类)
Plist文件(属性列表)是将某些特定的类,通过XML文件的方式保存在目录中。什么是 XML?可扩展标记语言 (XML) 允许您以可共享的方式定义和存储数据。XML 支持计算机系统(如网站、数据库和第三方应用程序)之间的信息交换。预定义的规则简化了在任何网络上以 XML 文件的形式传输数据的过程,接收者可以使用这些规则准确高效地读取数据。Perference(偏好设置)顾名思义就是专门用来存储系统的偏好配置、用户设置的参数和App的状态等少量信息的,一般不保存其他数据
2023-11-23 22:29:11
1277
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人