![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
底层原理
文章平均质量分 85
底层原理更加能够帮助我们了解iOS
Z苗
这个作者很懒,什么都没留下…
展开
-
从底层分析一下存在跨进程通信问题的 NSUserDefaults 还能用吗?
前言字节团队最近分享的 iOS 稳定性问题治理:卡死崩溃监控原理及最佳实践 提到:NSUserDefaults 底层实现中存在直接或者间接的跨进程通信,在主线程同步调用容易发生卡死。随之而来的问题就是:NSUserDefaults 还能用吗?经过对底层分析后,笔者的研究结论是:可以在理解 NSUserDefaults 的特性后再使用。一、NSUserDefaults 是什么?NSUserDefaults 是 iOS 开发者常用的持久化工具,通常用于存储少量的数据示例:NSUserDefault原创 2021-09-02 18:49:46 · 800 阅读 · 0 评论 -
离屏渲染&图形渲染的流程
图形渲染的流程iOS图形渲染的技术栈APP通过Core Graphics ,Core Animation ,Core Image 等框架进行可视化的绘制,这些框架相互依赖,并通过OpenGL ES /Metal 调度GPU进行视图的渲染最终显示在屏幕上。UIKit1.UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面( UI )接口、应用程序对象、事件控制、绘图模型、窗口、视图和用于控制触摸屏等的接口。2.开发者一般直接使用UIKit进行视图的布局和对用原创 2021-09-01 21:58:08 · 608 阅读 · 0 评论 -
iOS 开发中的『库』
看文章之前,你可以看下下面几个问题,如果你都会了,或许可以不看。.framework 是什么?怎么制作?谈一谈自己对动态库和静态库的理解。在项目中如何使用动态framework的 APP ?使用了动态framework 的 APP 能上架 Appstore 么?可以通过 framework 的方式实现 app 的热修复么?动态库 VS. 静态库...原创 2021-08-21 15:39:53 · 223 阅读 · 0 评论 -
类的加载(下)
在上一篇文章iOS-底层原理 :类的加载(上)中,理解了类是如何从Mach-O加载到内存中,这次我们来解释下分类是如何加载到类中的,以及分类和类搭配使用的情况原创 2021-08-18 14:27:06 · 76 阅读 · 0 评论 -
类的加载(上)
在上一篇:dyld与objc的关联文章中,我们理解了dyld与objc是如何关联的,本文的主要目的是理解类的相关信息是如何加载到内存的,其中重点关注map_images和load_imagesmap_images:主要是管理文件中和动态库中的所有符号,即class、protocol、selector、category等load_images:加载执行load方法其中代码通过编译,读取到Mach-O可执行文件中,再从Mach-O中读取到内存,如下图所示...原创 2021-08-16 14:24:59 · 182 阅读 · 0 评论 -
dyld与objc的关联
_objc_init 源码解析首先,来看下libObjc中的_objc_init方法源码void _objc_init(void){ static bool initialized = false; if (initialized) return; initialized = true; // fixme defer initialization until an objc-using image is found? //读取影响运行时的环境变量,如果原创 2021-08-16 12:50:36 · 172 阅读 · 0 评论 -
App 加载分析(dyld加载流程)
引子本文的目的主要是分析dyld的加载流程,了解在main函数之前,底层还做了什么创建一个project,在ViewController中重写了load方法,在main中加了一个C++方法,即zmFunc,请问它们的打印先后顺序是什么运行程序,查看 load、zmFunc、main的打印顺序,下面是打印结果,通过结果可以看出其顺序是 load --> C++方法 --> main...原创 2021-08-13 15:15:09 · 274 阅读 · 0 评论 -
iOS 底层探索 - KVO
什么是 KVO?KVO 提供了一种当其他对象的属性发生变化就会通知观察者对象的机制根据官网的定义,属性的分类可以分为下列三种:Attributes: 简单属性,比如基本数据类型,字符串和布尔值,而诸如 NSNumber 和其它一些不可变类型比如 NSColor也可以被认为是简单属性To-one relationships: 这些是具有自己属性的可变对象属性。即对象的属性可以更改,而无需更改对象本身。例如,一个Account 对象可能具有一个 owner 属性,该属性是 Person 对象的原创 2021-07-31 16:38:28 · 424 阅读 · 0 评论 -
ios block的全方位解刨(block用什么修饰,block的循环引用,weakSelf 需要配合 strongSelf 使用,操作Block外部的变量)
第一部分:Block本质block 是Cocoa/Cocoa Touch Framework 中的匿名函式(Anonymous Functions)的实作。所谓的匿名函式,就是一段 具有物件性质的程式码,这一段程式码可以当做函式执行,另一方面,又可以当做物件传递;因为可以当做物件传递,所以可以让某段程式码变成是某个物件的某个 property,或是当做 method 或是 function 的...原创 2019-03-14 15:46:27 · 2685 阅读 · 0 评论 -
数组与集合
集合三大特性确定性互异性无序性集合运算集合运算包括子集,叛等,交集,并集,补集,密集,在编程语言中仍然提供关于这些集合运算的数学方法在iOS 中集合的编程模型对应NSSet 这个类,与数学理论保持一致,但对于编程语言来说,无法在编译时就确定元素是否有互异性,因此可以添加相同的元素,但内部添加相同的元素仅会保持一个。 NSSet *set = [NSSet setWithObjects:@1,@2,@3,@1, nil]; NSLog(@"%@",set);打印结果{( 3原创 2021-07-17 16:59:25 · 461 阅读 · 0 评论 -
APP启动优化
APP启动是从哪里开始的?有人说是从main函数开始的,因为main函数是程序的代理AppDelegate的创建入口,自然也是整个应用的入口,其实从宏观角度上来说是这样的,但认真起来却不是这样的首先创建一个工程,然后在ViewController.m 中添加一个方法。+ (void)load { NSLog(@"load");}然后再main函数的地方,也就是main.m中,顺便也加一个NSLog:int main(int argc, char * argv[]) { NSS原创 2021-07-15 18:15:24 · 886 阅读 · 0 评论 -
KVC的深层讲解
1. 谈谈你对KVC的理解KVC可以通过 key直接访问对象的属性给对象属性赋值运行时动态的访问或修改对象的属性底层执行机制如下以[self setValue:@“小明” forKey:@“name”];这句代码作为例子进行说明。1.程序优先调用setKey:属性方法,代码通过setter方法完成设置。注意这里的Key是指成员变量名,首字母大小写要符合KVC命名规范2.如果没有找到setName:方法KVC机制会检查+(BOOL)accessInstanceVariablesDi原创 2021-07-15 12:54:25 · 1886 阅读 · 1 评论 -
初始化讲解
在Objective-C,创建一个对象是通过alloc和init两部来实现的,alloc是为改对象分配内存空间,init才是真正将对象创建为实例。可以理解为 alloc是按照改类的数据结构,在内存中开辟出相应的大小并设置引用计数为1,最后通过init才真正完成初始化的操作。所以通过alloc 创建的对象虽然为instancetype,确是不可用的,所以我们自定义初始化方法,一般不会区重写alloc,而是通过重写init方法,或者自定义一些初始化init方法。在自定义的初始化方法中,为了保证实例被真正创建,原创 2021-07-12 17:55:00 · 958 阅读 · 0 评论 -
1.4 黑魔法
在实例项目开发中,经常需要通过runtime 来给类的类方法或实例方法做交换,从而达到不用修改原类的代码就可以给原类中特定的方法做替换操作。虽然这只是runtime 的其中一个功能,但可以用来做很多事情。...原创 2021-06-26 13:36:20 · 1675 阅读 · 0 评论 -
RunLoop的实际应用
解决NSTimer在滑动时停止工作的问题原创 2021-06-24 16:28:45 · 997 阅读 · 0 评论 -
iOS底层原理 RunLoop
什么是RunLoop从字面意思来看,就是运行循环的意思,其实就是在程序运行过程中循环做一些事情RunLoop的应用范畴定时器(Timer)、PerformSelector- GCD Async Main Queue- 事件响应、手势识别、界面刷新- 网络请求- AutoreleasePool在main函数中,如果没有RunLoop,那么下面代码执行完第三行后就会退出程序int main(int argc, char * argv[]) { @autoreleasepool {原创 2021-06-23 18:28:20 · 875 阅读 · 0 评论