- 博客(86)
- 收藏
- 关注
原创 【iOS】Category、Extension和关联对象
类型的 对象方法列表结构体类型的 类方法列表结构体类型的 协议列表结构体类型的 属性列表结构体结构体中并不包含类型,也就是不包含成员变量结构体首先分类加载分为两种情况:非懒加载分类和懒加载分类,所以分类就有两条加载流程。进入,执行,在中调用了,再到中调用了–>–>–>此时的状态是: 分类对应的主类都还没有实现(没有被初始化),我们只是调用了中的分支将分类和主类关联并将分类加载进了内存。执行完之后,我们回到方法获取类和分类的load方法,在其中调用了。
2023-09-04 16:32:39
2058
原创 【iOS】autoreleasepool
总的来说,就是一个双向链表,链表中的每个节点是一个栈,栈中保存了指向的指针并且其中加入了需要自动释放池管理的对象,所以在中的所有对象引用计数都会+1,一旦出了,没有指针指向对象,对象的引用计数就会-1,ARC下,xcode会为代码自动添加。自动释放池是由以双向链表的方式实现的当对象调用方法时,会将对象加入的栈中调用方法会向栈中的对象发送release消息。
2023-08-09 16:14:24
1340
原创 【iOS】RunLoop
Mode到底包含哪些类型的元素?前面提到过:存储所有commonMode的itemsourcetimerobserver上面的SourceTimerObserver被统称为mode item所有的mode item都可以被添加到Mode中,Mode中可以包含多个mode item,一个item也可以被加入多个mode。但一个item被重复加入同一个mode时是不会有效果的。如果一个mode中一个item都没有,则RunLoop会退出,不进入循环。
2023-08-08 11:11:43
1371
原创 【iOS】锁
当一个线程访问数据的时候,其他的线程不能对其进行访问,直到该线程访问完毕。简单来讲就是在同一时刻,对同一个数据操作的线程只有一个。而线程不安全,则是在同一时刻可以有多个线程对该数据进行访问,从而得不到预期的结果。在iOS中,UIKit是绝对线程安全的,因为UIKit都是在主线程操作的,单线程没有线程当然没有线程安全问题,但除此之外,其他都要考虑线程安全问题iOS解决线程安全的途径其原理大同小异,都是通过锁来使关键代码保证同步执行,从而确保线程安全性,这一点和多线程的异步执行任务是不冲突的。
2023-08-03 12:03:12
1719
原创 【iOS】通知原理
我们可以通过看通知的实现机制来了解通知中心是怎么实现对观察者的引用的。由于苹果对Foundation源码是不开源的,我们具体就参考一下GNUStep的源码实现。, 具体源码可以进行查看。
2023-07-31 20:08:00
1104
1
原创 【iOS】单例、通知、代理
方法delegateKVOblock优点1.逻辑清楚2代码可读性较强3.编译器会检查是否实现了所有方法4.-个controller可以有多个协议5.减少代码耦合性1.代码量小2.可以实现一对多3.传值方便快捷1.可以简单的实现两个对象同步2.可以观察当前值和先前值3.能够对非我们创建的对象,即内部对象的状态改变作出响应,而且不需要改变内部对象(SDK对象)的实现。
2023-07-29 09:25:48
1064
原创 【iOS】iOS持久化
iOS中的沙盒机制是一种安全体系。为了保证系统安全,iOS每个应用程序在安装时,会创建属于自己的沙盒文件(存储空间)。应用程序只能访问自身的沙盒文件,不能访问其他应用程序的沙盒文件,当应用程序需要向外部请求或接收数据时,都需要经过权限认证,否则,无法获取到数据。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中。
2023-07-27 11:20:00
1533
原创 【iOS】isKindOfClass和isMemberOfClass方法
这个归根结底还是在考察我们对isa走向图和类的继承的理解,也就是苹果官方这幅图:接下来的函数调用流程请参考这张图。
2023-07-24 20:54:25
1595
原创 【iOS】动态链接器dyld
dyld(Dynamic Linker)是 macOS 和 iOS 系统中的动态链接器,它是负责在运行时加载和链接动态共享库(dylib)或可执行文件的组件。在 macOS 系统中,dyld 位于。dyld源码地址。
2023-07-24 15:58:41
2064
原创 【iOS】weak关键字的实现原理
weak的原理在于底层维护了一张结构的hash表,key是所指对象的地址,value是weak指针的地址数组。weak 关键字的作用是弱引用,所引用对象的计数器不会加1,并在引用对象被释放的时候自动被设置为 nil。对象释放时,调用函数根据对象地址获取所有weak指针地址的数组,然后遍历这个数组把其中的数据设为nil,最后把这个entry从weak表中删除,最后清理对象的记录。文章中介绍了SideTable这样三个结构。
2023-07-22 16:55:17
721
原创 【iOS】对象底层学习
其中isa指针式其继承自objc_object的,所以代码里才注释了// Class ISA(isa是结构体,其中会存储类的地址,其并不是指针,“isa指向”这句话严格来说是不正确的,但是方便理解);我们无法确定申请多余的字节就在对象与对象之间,有可能会出现在对象内存段的内部某个位置,这个时候就可能会出现两个对象内存段是挨着的情况,没有那么的安全。从此处我们可以知道,OC的类其实也是一个对象,一个对象就要有一个它属于的类,意味着类也要有一个isa指针,指向其所属的类。那么类的类是什么呢?
2023-07-20 11:22:43
299
原创 【iOS】消息传递和消息转发机制
检查消息接收者receiver是否存在,为nil则不做任何处理通过receiver的isa指针找到对应的class类对象找到class类对象进行内存平移,找到cache从cache中获取buckets从buckets中对比参数sel,看在缓存里有没有同名方法如果buckets中有对应的sel --> cacheHit --> 调用imp。
2023-06-04 20:20:53
1373
原创 【iOS】SDWebImage源码学习--未完
SDWebImage是一个流行的第三方库,用于在iOS和macOS应用程序中异步下载和缓存图像。
2023-05-21 21:33:39
733
1
原创 【iOS】NSOperation
NSOperation 是居于objective-c对GCD封装居于面向对象的,线程执行方式;NSOperation配合NSOperationQueue也能实现多线程编程;先将需要执行的操作封装到一个NSOperation对象中然后将NSOperation对象添加到NSOperationQueue中将取出的NSOperation封装的操作放到一条新线程中执行。
2023-05-11 21:12:50
720
原创 【C++】动态规划
动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。
2023-05-07 17:06:56
1931
1
原创 【C++】哈希表
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。
2023-05-07 12:12:34
2059
1
原创 【iOS】GCD学习
GCD(Grand Central Dispatch),是有Apple公司开发的一个多核编程的解决方案,用以优化应用程序支持多核处理器,是基于线程模式之上执行并发任务。
2023-05-02 08:37:03
1263
原创 JSONModel源码
JSONModelClassProperty: 封装的jsonmodel的一个属性,它包含了对应属性的名字(name:sex),类型(type:NSString),是否是JSONModel支持的类型(isStandardJSONType:YES/NO),是否是可变对象(isMutable:YES/NO)等属性。其中对于protocol的使用较为特殊,在这里的protocol并非我们平常当作接口抽象的作用,而是单纯的为了让encode string中增加相应的字段,可以在解析与赋值的时候给予特定的含义。
2023-04-16 21:04:11
363
原创 【iOS】遍历相册照片
Photos 框架是苹果公司提供的一个用于访问和管理 iOS 和 macOS 上的照片和视频的框架。它提供了一套 API,可以让开发者在应用程序中访问用户的照片和视频,并对它们进行处理和编辑。使用 Photos 框架的优点是,它提供了一套非常简单易用的 API,可以让开发者很容易地访问和处理用户的照片和视频。同时,Photos 框架也支持对媒体资料进行高效的存储和管理,可以保证应用程序在处理大量媒体资料时的性能和稳定性。
2023-04-01 19:12:17
811
原创 【iOS】自动引用计数学习
在这段代码中,通过将传入的对象指针 anObject 转换为结构体指针 ((struct obj_layout *) anObject),然后访问其前一个元素 [-1],即访问对象所在内存块的前一个元素,这个前一个元素就是对象的布局结构体,通过访问这个布局结构体的 retained 域,可以得到当前对象的引用计数值,进而实现对其进行增加的操作。当我们调用一个对象的 retain 方法时,其引用计数值会加1,表示有一个新的对象持有了该对象的引用,从而防止该对象在被其它对象持有的引用都被释放后被系统回收。
2023-03-27 22:20:58
583
原创 【OC】block的实现
Block语法实际上是作为极普通的C语言代码来处理的。通过支持Block的编译器,含有Block语法的源代码转换为一般C语言编译器能够处理的源代码,并作为极为普通的C语言源代码被编译。这只不过是概念的问题,在实际编译时无法转换成我们能够理解的源码,但clang具有转换成我们可读源代码的功能。通过“-rewrite-objc”选项就能将含有block语法的源代码转换为C++的源代码。说是C++,其实尽是使用了struct结构,其本质是C语言的源代码。clang -rewrite-objc 源代码文件名。
2023-03-19 22:28:49
408
原创 【OC】Blocks模式
完整形式的Block语法与一般的C语言函数定义相比,仅有两点不同。因为OS X、iOS应用程序会大量使用Block,所以插入“^”记号方便查找。以下为Block语法的BN范式。即便此前不了解BN范式,通过说明也能有个概念。^ 返回值类型 参数列表 表达式^ 参数列表 表达式省略返回值类型时,Block语法将按照return语句的类型返回。如果表达式中有多个return语句,所以return语句的类型必须一致。^ 返回值类型 表达式如果不使用参数,可省略。^ 表达式。
2023-03-05 21:39:53
841
原创 [Effective Objective] 块与大中枢派发
为了解决多线程问题,苹果公司以全新的方式设计了多线程。核心就是“块”(block)与“大中枢派发”(Grand Central Dispatch, GCD)。“块”是一种可在C、C++及Objective-C代码中使用的“词法闭包”,借由此机制,开发者可将代码向对象一样传递,令其在不同环境下运行。GCD是一种与块有关的技术,它提供了对线程的抽象,这种抽象则基于“派发队列”。开发者可将块排入队列中,由GCD负责所有调度事宜。GCD会根据系统资源情况,创建、复用、摧毁后台线程,以便处理每个队列。
2023-02-04 01:22:01
530
原创 [Effective Objective] 对象、消息、运行期
Objective-C的做法是,把实例变量当作一种储存偏移量所用的“特殊变量”(special variable),交由“类对象”(class object)保管。偏移量会在运行期查找,如果类的定义变了,那么储存的偏移量也就变了,这样的话,无论何时访问实例变量,总能使用正确的偏移量。这就是稳固的应用程序二进制接口(Application Binary Interface, ABI)。有时需要在对象中存放相关信息。这时我们通常会从对象所属的类中继承一个子类,然后改用这个子类对象。
2023-01-14 21:53:04
653
原创 [Effective Objective] 熟悉Objective-C
Objective_C 是一种面向对象的语言。但与jave、C++等语言不同,它使用了消息结构(messaging structure)而非函数调用(function calling)。Objective-C由Smalltalk演化而来,后者是消息语言的鼻祖。
2023-01-08 00:27:14
439
原创 【iOS】CAlayer的认识与使用
CALayer是UIView里的一个图层,其主要功能是负责显示视图与动画。CALayer和UIView 功能是一致的、 不过因为其 更加底层 所以 CALayer 有一些接口、 UIView 里面没有。
2022-12-25 23:10:47
993
原创 UICollectionView 实际使用
我想的书架是那种每一排都可以滑动的。暂时的想法是使用两个collectionView,第一个collectionView布置书架的每一排,第二个布置每一排内部的书。
2022-12-18 21:26:36
863
原创 【iOS】AFNetworking
AFNetworking是MAC/iOS为了简化网络操作设计的一套网络框架,专注与网络数据传输 ,以及网络中多线程的处理,只需要简单几步就可以完成网络请求任务。这里使用根据城市名查询城市的api:试运行:
2022-12-05 23:54:43
403
原创 【iOS】UICollectionView的基本使用
UICollectionViewLayout是一个layout对象,UICollectionView几乎所有的显示效果都由UICollectionViewLayout负责。UICollectionViewFlowLayout是继承自UICollectionViewLayout的,是官方实现的流水布局效果,是一种非常经典的布局效果,应该也是我们最常用的。itemSize 每个item的大小;minimumLineSpacing 每行最小间距;
2022-11-27 19:47:40
2045
原创 知乎日报第四周总结
原因是原方法下会有界面混乱的问题。原方法是我滑倒最后一页,在往后滑一定距离就会发送通知请求数据,并刷新页面。但是最近发现如果我只是往后滑一些,然后不停有把它滑会原最后一页。数据会继续请求并刷新,但是页面计算会出问题。因为我是把新数据第一页直接放在当前页面,所以新数据第一页会覆盖掉原数据最后一页。因为我是在数据请求前先添加6页,之后再根据数据更改,如果我一直向后滑甚至会出现数组越界问题。我又想不出办法监控它滑完后到底在哪一页,又应该能把新数据第一页覆盖到哪一页,所以就换了一个办法。
2022-11-13 23:15:22
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人