摘要: func compare(_ predicateString: String, num: Any) -> Bool { let predicate = NSPredicate(format: predicateString) return predicate.evaluate(with: num) 阅读全文
posted @ 2023-04-21 14:05 dulinshun 阅读(81) 评论(0) 推荐(0)
摘要: load: 程序被加载的时候调用,先执 父类 > 子类 > 分类 线程安全的,内部使用了锁。所以尽量避免在 load 方法中阻塞线程 initialize: 第一次给某类发送消息的时候调用,而且只会调用一次 阅读全文
posted @ 2023-04-21 13:47 dulinshun 阅读(37) 评论(0) 推荐(0)
摘要: 1. 什么是线程锁 线程锁主要是用来控制多个线程同时访问和修改,避免造成不可预期的问题。 2. 自旋锁和互斥锁 自旋锁: 一种用来保护多线程共享资源的锁,与互斥锁不同的是,当自旋锁尝试获取锁是否可用时,以忙等待进行循环检查锁是否可用。当上一个线程没有执行完毕时,下一个线程一直处于忙等待中,不能休眠。 阅读全文
posted @ 2023-04-21 13:46 dulinshun 阅读(114) 评论(0) 推荐(0)
摘要: 三个都是多线程相关的。 GCD 简单介绍 iOS 和 osx 的核心内核是 XNU 内核,GCD 是基于 XNU 内核实现的 GCD 的 API 全部的 libdispatch 中 GCD 的底层实现主要是 Dispatch Queue 和 Dispatch Source GCD 和 NSOpera 阅读全文
posted @ 2023-04-21 13:46 dulinshun 阅读(10) 评论(0) 推荐(0)
摘要: 动态类型 动态绑定 动态加载 动态类型:即运行时再决定对象的类型。编译阶段,任何对象都可以指定为 id 类型,等到运行时,才知道具体的类型。 动态绑定:基于动态类型,即某个对象在确定后,其属性和响应消息也被完全确定。 动态加载:1.动态加载资源,2可以动态添加类,方法等 阅读全文
posted @ 2023-04-21 13:45 dulinshun 阅读(37) 评论(0) 推荐(0)
摘要: Copy经常使用的地方是在对属性进行描述的时候。 经常使用Copy的类型,NSString, NSArray, NSDictionary, Block 等 NSString、NSArray, NSDictionary 使用copy的原因 NSString → NSMutableString NSAr 阅读全文
posted @ 2023-04-21 13:43 dulinshun 阅读(59) 评论(0) 推荐(0)
摘要: 消息发送阶段:调用 objc_msgSend 函数,进行一些内部逻辑处理。会涉及到cache_list 和 method_list 等。 动态方法解析:允许开发者动态创建方法。 消息转发:进入消息转发阶段 阅读全文
posted @ 2023-04-21 13:43 dulinshun 阅读(13) 评论(0) 推荐(0)
摘要: Runtime 维护了一张weak表,用来存放对象的weak指针 weak表是一张哈希表,对象的指针为key,value为指向该对象的weak指针数组。 当对象被释放前,会查询weak表中的所有weak指针,并依次指向nil。 阅读全文
posted @ 2023-04-21 13:42 dulinshun 阅读(58) 评论(0) 推荐(0)
摘要: Runtime 底层有一个 map 进行关联。 以对象地址为 key,绑定的对象为 value 进行关联 阅读全文
posted @ 2023-04-21 13:41 dulinshun 阅读(13) 评论(0) 推荐(0)
摘要: 测试类 @interface People () @property (nonatomic, strong) Car *car; @end @implementation People - (instancetype)init { self = [super init]; if (self) { s 阅读全文
posted @ 2023-04-21 13:41 dulinshun 阅读(78) 评论(0) 推荐(0)
摘要: 一个 Runloop 包含了多个 mode 一个 mode 包含了若干个 source0/source1/time/observer Runloop 启动时只能选择其中一个 model 作为当前 model Runloop 常用的 Model 1. UIInitializationRunLoopMo 阅读全文
posted @ 2023-04-21 13:39 dulinshun 阅读(52) 评论(0) 推荐(0)
摘要: 注:适用于Java 等其他语言的技术原理 存储的逻辑 1. 字典底层有一个数组,靠数组来存储数据; 2. 将 key 进行 hash 算法。得到 `hash值`; 3. 将 `hash值` 与 `数组的长度` 进行`位与运算`, 得到的结果为数据应该存储的位置; 4. 找到数组对应的位置,然后设置对 阅读全文
posted @ 2023-04-21 13:39 dulinshun 阅读(116) 评论(0) 推荐(0)
摘要: 具体参考文章 AutoRelease 是依靠 AutoreleasePoolPage 来进行 push 和 pop 进行工作的 AutoreleasePoolPage 为双向链表,parent 字段指向上一层,child 指向下一层 每个 AutoreleasePoolPage 的大小为 4096 阅读全文
posted @ 2023-04-21 13:38 dulinshun 阅读(64) 评论(0) 推荐(0)
摘要: iOS中不是所有的对象都能响应的,只有继承 UIResponder 的对象才能进行响应处理事件,称之为响应者对象。 常见的响应者对象有:UIView, UIViewController, UIApplication 响应链的流程: 1. 当产生某一个触摸事件的时候,这个触摸事件回添加到UIAppli 阅读全文
posted @ 2023-04-21 13:37 dulinshun 阅读(102) 评论(0) 推荐(0)
摘要: KVO 是依赖 kvc 进行实现的。主要是依赖了 isa_swizzling 来实现的。 当对一个类第一次进行观察时,系统会动态的创建一个派生类 修改观察的对象的 isa 指针指向,指向新建的派生类 派生类中,系统会重写观察的属性的 set 方法 然后通过 kvc 的willChangeValueF 阅读全文
posted @ 2023-04-21 13:37 dulinshun 阅读(33) 评论(0) 推荐(0)
摘要: Swift 项目中的 Podfile 中默认会有一个 use_frameworks!,本篇说一下 use_frameworks!。 1. Pod 引入组件的类型 iOS 使用 Pod 引入组件,主要引入以下类型的组件。 类型 1:静态库类型组件。可以为 `.a` 或 `.framework` 类型的 阅读全文
posted @ 2023-04-21 13:36 dulinshun 阅读(1241) 评论(0) 推荐(0)
摘要: 转载自Swift 正则表达式 - 简书 (jianshu.com) 数字:^[0-9]*$ n 位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0- 阅读全文
posted @ 2023-04-21 13:31 dulinshun 阅读(357) 评论(0) 推荐(0)
摘要: // 当前设备型号 static var deviceModel: String { var systemInfo = utsname() uname(&systemInfo) let machineMirror = Mirror(reflecting: systemInfo.machine) le 阅读全文
posted @ 2023-04-21 13:28 dulinshun 阅读(45) 评论(0) 推荐(0)
摘要: Realm Swift 使用 Reaml 的使用在RealmSwift查看 配合 RxSwift 时候用 关于 Realm 配合 RxSwift 使用的方法在RxRealm中查看 Realm 数据库更新 每次当数据库中的 key 值数量增加或者减少后,都需要进行更新数据库。更新数据库流程为: 获取配 阅读全文
posted @ 2023-04-21 12:00 dulinshun 阅读(392) 评论(0) 推荐(0)
摘要: OC 的基础数据类型和 C 的差不多。 基础数据类型 | 数据类型 | | 16 位编译器 | 32 位编译器 | 64 位编译器 | | - | - | - | - | - | | char | 字符型 | 2 字节 | 4 字节 | 4 字节 | | short int | 短整型 | 2 字节 阅读全文
posted @ 2023-04-21 12:00 dulinshun 阅读(46) 评论(0) 推荐(0)