自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

coding不死,也未曾凋零

通过苹果开放源码与汇编堆栈等方式分析ios底层原理 runtime msg block 线程 kvc kvo dispatch 更新苹果最新cpu gpu gcd dylb技术 xcode clang编译脚本 swift编译脚本 符号问题处理 ; Flu

  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 算法社区-从零开始构建(一)

好久没动笔了,一是要处理的东西很多,二则写出来未见得深刻,感觉沉淀得不够,太浅显的东西就没必要分享。正好最近在研究算法层面的东西,感觉挺受用的,就想着把这些东西整理出来,有点像社区的雏形,但一个人的力量毕竟有限,是否可以通过一个专项社区来讨论分享呢,抱着试一试的想法,就开始了…- 刚放出来,也不知道这种形式如何。

2024-06-24 23:02:19 779

原创 Block原理(二)- 用白话说说底层源码,不扯代码

基于ios底层block源码阅读的基础上,抽象出block的顶层设计结构,尽可能方便实惠的了解block的真正魔法内涵,只有意识里顺畅捋清楚block的设计问题,才可能下一步更好的处理block的引用

2023-04-22 18:53:11 676

原创 深度学习基础(二)-学习是怎么个回事

介绍神经网络的结构,搭建能够识别手写数字的神经网络,神经网络变种很多,卷积神经网络,长短期记忆网络等等,这些都基于最简单的MLP(多层感知器),基于此基础我们才更好理解功能强大的现代变种。其中包括抽象网络变换,神经元如何作用,构造网络关键参数,网络模型如何学习,梯度下降算法原理如何,如何调整等等

2023-02-26 00:36:17 480

原创 深度学习基础(一)

介绍神经网络的结构,搭建能够识别手写数字的神经网络,神经网络变种很多,卷积神经网络,长短期记忆网络等等,这些都基于最简单的MLP(多层感知器),基于此基础我们才更好理解功能强大的现代变种。其中包括抽象网络变换,神经元如何作用,构造网络关键参数,网络模型如何学习,梯度下降算法原理如何,如何调整等等

2023-02-21 17:29:46 414

原创 swift指针&内存管理-闭包的循环引用

无主引用 - swift实例内存空间引用存储方式为如何闭包循环引用 - 强引用 弱引用存储方式 deinit执行逻辑 强应用,导致deinit不执行的真正逻辑是什么 闭包捕获列表参数的理解闭包解决循环引用的方式闭包延长实例的声明周期 两种方式

2022-11-24 23:56:18 1729

原创 swift指针&内存管理-引用

swift 的引用源码探究RefCountBitsT模板的理解强引用 无主引用的存储散列表 - 弱引用结构的存储与强引用存储关系如何通过调试查看还原读取弱引用信息

2022-11-24 03:50:50 1239

原创 swift指针&内存管理-指针类型使用

为什么说指针不安全原因:堆内存生命周期,内存空间访问越界,指针类型与内存类型不一致;Swift中的指针分为两类 typed pointer & raw pointer原始指针-rawPointer 的使用泛型指针的使用

2022-11-23 23:33:07 1035

原创 swift指针&内存管理-内存绑定

swift提供了3种不同的API来绑定/重新绑定指针assumingMemoryBound(绕过编译器检查, 并不发生指针转换)bindMemory(发生指针转换)withMemoryRebound(api闭包作用域内有效,也就是转换只发生在闭包作用域内,临时改变内存绑定)关于尾随闭包语法形式问题的补充解释说明

2022-11-23 05:01:26 1164

原创 swift枚举(三)-Optional

可选值 自定义Optional 替代模式匹配 if let/guard let可选链 swift.模拟OC向一个nil发送消息可选链也适用于下标和函数调用运算符重载隐士解析可选类型应用可选值高阶函数map flatMap 及 Sequence - compactMap

2022-11-21 23:07:49 912

原创 swift枚举(二)

对比OC 枚举类型,探究验证swift中枚举类型本质swift enum声明原始类型Swift 原始值推断机制关联值&模式匹配No-payloadSingle-payloadMutil-payload

2022-11-21 21:22:39 987

原创 swift枚举(一)

对比OC 枚举类型,探究验证swift中枚举类型本质swift enum声明原始类型Swift 原始值推断机制关联值&模式匹配No-payload

2022-11-21 19:07:15 1567

原创 swift-类属性-MachO读取

结合源码分析得出的metadata结构,通过MachO读取类相关信息,进一步验证swift class结构,了解MachO结构了解到类结构在MachO section中的存储方式及类结构在MachO可执行文件中的内存部署方式,尤其是偏移,如何利用读取到的地址信息递进获取结构内容

2022-11-21 16:51:03 1406

原创 swift-类属性

swift class底层本质数据结构swift类结构源码探索过程中遇到的问题符合继续MachO文件类数据读取

2022-11-16 05:36:14 1345

原创 swift-类结构源码探寻(二)

紧跟,继续 TargetClassDescriptor分析TargetClassDescriptor 中包含了超长的基类描述,超多的using我们分析主干思路,重在检索数据结构,暂时无关的信息暂时忽略掉先从 TargetClassDescriptor 属性信息 整理汇总注意FieldOffsetVectorOffset 注释信息结合关于 Description: TargetClassDescriptor 越界描述大概意思是 偏移出 metadata结构 之外,还存在的一些信息。

2022-11-12 06:18:00 1296

原创 swift-类结构源码探寻(一)

通过简单的demo实例 + 少量汇编代码查看 + swift编译器swiftc生成swift中间代码 sil语法分析来探究,最后通过 MachO进行验证 OC是通过clang编译器,编译成IR,然后生成可执行文件.o(机器码) Swift则是通过Swift编译器编译生成IR,然后生成可执行文件 了解到一些必要的汇编指令 通过读取MachO文件得到swift类的方法调用地址 源码查看分析Metadata数据结构

2022-11-11 16:41:32 2076 3

原创 swift-结构体异变方法

结构体值类型使用 测试结构体与类的内存分配 类的内存开辟消耗时间均 比 结构体值类型内存开品时间长 引用类型内存开辟与访问比值类型 内存访问多一个层级 引用类型访问堆,在堆上开辟空间;值类型直接在栈上分配内存,少一个层级操作;结构体值类型的一个重要应用就是字典的key的存储;异变方法的本质 - 对于变异的方法,方法默认参数(最后一个参数 self 被标记为 inout), 无论在 mutaing 修饰的方法内部发生什么,都会影响外部依赖类型的一切

2022-10-28 23:58:10 1805

原创 Mach-O详解(一) - 破题

是一种可执行文件,用于目标代码,动态库,内核转储每个Mach-O文件包括一个Mach-O头,一系列的载入命令,多个块Mach Header: 描述 Mach-O 的CPU架构、文件类型、加载命令等信息Load Commands: 描述文件中数据等具体组织结构,不同数据类型使用不同等加载命令表示Data: Data中每一个段(Segment)的数据保存在此,段用来存放数据和代码...

2022-08-31 09:28:22 1389

原创 算法 - 最小生成树实现

最小生成树是什么 图的概念 最小生成树就是这个连通图子图并满足条件 n个顶点,只会有n-1条边 最小生成树中 所有边 权重之和是最小的 最小生成树能做什么 邻接矩阵 邻接表 克鲁斯卡尔Kruskal算法 普里姆Prim算法......

2022-08-16 05:25:13 1844

原创 ios-关联对象

假设对象 objc, 属性 key 属性值 value- objc 求hash ==> index - buckets[index] ==> bucket- bucket->second ==> sub_buckets (bucke->first ==> objc)- key 求hash ==> sub_index- sub_buckets[sub_index] ==> sub_bucket- sub_bucket->second ==> association....

2022-08-13 01:54:23 1662

原创 ios-弱引用

使用 __weak typeof(id) weakSelf = selfweakSelf 加入到弱引用表此时 self 引用计数为 1,weakSelf 引用计数为 2,也就是 加入弱引用表之后,是不影响引用计数的。具体弱引用表结构的访问 StripedMap - SideTable.weak_table - weak_entries数组 - 哈希计算索引 - 目标entry 两种存储方式,按条件触发选择方式...

2022-08-12 06:36:48 1510

原创 ios-散列表

散列表究竟是个什么样的结构,它与引用计数的关系是什么样的;引出StripedMap; StripedMap取表的过程;SideTable;理解散列表;全局StripdMap可以理解为三层套娃结构; 第一层,通过 对象指针地址 经过哈希函数运算,得到 StripdMap中数组结构的索引;第二层,通过hash得到的索引,从 StripdMap中数组结构 中取出 Sidetable;引用计数表-refcnts[对象指针] --> Bucket() 结构...

2022-08-11 20:27:36 1976

原创 iOS中的符号冲突(二)- 理解进阶

符号其实就是文件里定义的函数或者方法在 Mach-o中的名称 实际上运行app的时候,执行的是机器码 机器码经过反汇编之后,会生成我们平时见到的汇编代码 app去掉符号之后,能不能运行呢?xcode 可以理解为一个大号的脚本 符号类型补充 弱定义/弱引用符号 ...

2022-08-10 19:30:07 1783

原创 iOS中的符号冲突(一)- 基础原理

作为iOS开发人员,经常会碰到符号的问题,确切的说在调试,收集崩溃时,避免不了乍一看,是个抽象的东西,不像我们处理逻辑业务问题那样,直接依托于语言本身,逻辑漏洞分析你面对的项目不可能是独立的很小的项目,往往依赖很多库,动态库等等,冲突无可避免,至于如何解决,那么前提你就需要多多少少理解符号的本质了虽然研究符号主要为了解决符号冲突问题。理解符号的种类与作用;查看符号的两个命令 nm & objdump;脱去(strip)不需要的符号;理解strip命令的实际作用;解决符号冲突;llvm-objcopy使用..

2022-08-10 19:26:55 1965 1

原创 iOS - header map加快编译速度(一)

hmap - header map 描述头文件映射关系.m文件 -> 最终app 的简单过程主要是两部分这两个阶段都需要时间,要考虑如何加快编译速度,首先得选择在以上哪个阶段处理,选择的标准就是看哪个阶段的耗时更长,处理才变得更有意义编译消耗时间 编译阶段消耗时长与链接消耗时间时间差一个数量级,所以处理编译阶段时间优化更有效如果头文件目录很多,意味着耗时进一步增加针对于编译.o 优化的几种方式组件二进制化 提前编译二进制库文件(打包静态库 dylibs framework)...

2022-08-10 19:24:39 2026 2

原创 栈 递归 算法应用实现

栈的顺序结构实现 栈的链式结构实现 进制转换问题-由于转换需要重复取模运算,而前面取模的结果往往在低位,后取模的结果在高位,输出按从左到右,由高位到低位,正好可以借助栈的后进先出来解决这个问题; 爬楼梯问题;爬楼梯算法实现; 每日气温问题 - 反向遍历方法实现 及 栈方式实现;去除重复字母,保持字典序最小;给定一个经过编码的字符串,返回它解码后的字符串 - 如何使用栈方式解决...

2022-08-10 19:22:41 1171

原创 从斐波那契 - 谈及动态规划 - 优化

通过最基础的斐波那契,我们可以先通过自己的理解,在自己能力范围内先实现算法在实现的基础上分析复杂度问题在自己实现的版本基础上发现可优化的点,比如常规的递归实现,包含了大量的重复执行,去掉不必要的执行,其实就是在优化算法了算法的复杂度优化是一步步循序渐进完善的,并非一蹴而就,也不是刷多少算法能解决的,其实是一种本质的思维方式没有什么高深的点,守得住耐心,总会找到完善的空间不抛弃底层的本质思维,不眼高手低,慢慢就会触及到一些思想的门槛,比如文章中的优化思路就摸到了 动态规划的思想。...

2022-08-10 19:18:16 225

原创 单链表有环问题 - 你emo了没

我们最直观的意识,可能就是用set遍历存储节点,由于set不能存储重复元素,所以只要在某个节点存储时,发现set中已经包含元素,则说明有环存在但是题目要求不能额外开辟空间剩下的条件很有限,像这样很明确的很简单的条件,往往我们考虑起来却花费很长时间,往往还想不明白,明明感觉很简单的几何定理也只是通过5条很简单的公理推导出来的有这种困惑,原因在于我们平时缺乏这方面的思维锻炼...

2022-08-10 19:17:14 994

原创 iOS解耦合-你做到了吗?

解耦之路: 经历单工程-模块化-插件化-组件化-独立编译发布依托于解耦工具BeeHive,如何解决组件之间,主工程与组件之间的耦合问题组件能够独立编译发布的细节在哪里解决耦合可以大幅提升编译效率............

2022-08-08 20:59:52 2431

原创 iOS-button响应流程

了解坐标转换及原因。梳理流程-- 触摸屏幕;IOKit.framework捕捉;通过IPC(进程间通信)转发给SpringBoard进程;通过IPC将事件转发给当前活跃的进程 ;app主线程runloop通过port signal检测到source1, 线程由休眠状态被激活,runloop继续轮询;runloop检测到source0(InputSource);touch事件加入application事件队列;查询响应者;低级处理/apple封装高级touch处理及关系;UIControl系统控件处理...

2022-08-08 19:30:57 1817

原创 算法 - 数组循环左移m个元素

整数数组,n个元素数组循环左移m个元素[1,2,3,4,5,6,7,8,9] -> [4,5,6,7,8,9,1,2,3]数组整体逆转 [1,2,3,4,5,6,7,8,9] -> [9,8,7,6,5,4,3,2,1]如果循环移动元素个数为3,拆分两部分处理 [9,8,7,6,5,4] [3,2,1][9,8,7,6,5,4] 逆转 -> [4,5,6,7,8,9][3,2,1] 逆转 -> [1,2,3]得到 [4,5,6,7,8,9,1,2,3]......

2022-07-29 19:58:30 2140

原创 算法 - 数组主元素(出现次数超过一半的元素)

整数数组,包含n个元素 主元素 - 某个元素出现次数 > n/2,是否存在主元素?如果存在,找出主元素。如何采用巧妙的统计方式让主元素判定变得简单些

2022-07-29 19:17:42 2326

原创 大厂算法反复面试-最长递增子序列

有n个动物重量分别a1,a2,a3....an,这群动物一起玩叠罗汉游戏规定从左往右选择动物,每只动物左边动物的总重量不超过自己的重量返回最多能选多少个动物,求一个高效的算法比如有7个动物,从左往右重量依次为 1,3,5,7,9,11,21最多能选5个动物 1,3,5,9,21注意:- 实际给定的数组可能是无序的- 要求从左往右选动物,且不能打乱原始数组......

2022-07-19 03:33:18 2387

原创 Web安全你了解多少(三)- 工具的使用

Web安全攻防渗透测试离不开工具的使用,这里介绍了5款:Brupsuite-拦截HTTP/HTTPS的代理服务器,对web应用程序进行自动化攻击,手动执行或对应用程序数据者智能编码解码;Curl-一般系统自带;Postman;插件Hackbar和Wappalyzer,Wappalyzer是一款功能强大的并且非常使用的网站技术分析插件,通过这个插件的功能,我们就可以了解到目标网站所采用的平台架构 网站环境 服务器配置环境 Javascript框架 以及变成语言等等...

2022-07-12 00:53:23 2863

原创 Web安全你了解多少(二)- HTTP基础&安全溯源

HTTP定义了客户端如何从Web服务器请求Web页面,以及Web服务器如何把Web页面传送给客户端; 通过TCP套接字,向Web服务器发送文本请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成; Web服务器解析请求,定位请求资源,将资源副本写到TCP套接字,由客户端读取; 返回响应之后,服务器检测connection状态,若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接请求 GET POST DELETE HEAD ......

2022-07-11 22:08:58 3749

原创 Web安全你了解多少(一)- 搭建一个django网站

用户输入网址看到网页,这个过程发生了什么DNS解析URL得出IP,IP寻址找到对应的服务器; TCP/IP协议建立到Web服务器的链接;发送HTTP请求报文;资源目录查找HTML文档或委托动态语言脚本处理的应用服务器,响应HTTP报文 常见的Web服务器有哪些Web应用框架如何构建一个最简单的web服务采用MTV框架模式 Model - View - Template django安装 django应用注册及建立及基本配置添加URL的映射关系启动第一个web应用初始化管理后台账号.....

2022-07-11 20:53:07 3444

原创 Block原理(一)

结合clang编译中间c++代码,block会创建两层结构BlockCreate 结构Block结构,属于BlockCreate的成员通过BlockCreate构造传参,实例化BlockCreate成员Block::block最终返回的是一个 BlockCreate结构指针通过BlockCreate结构首地址,可以拿到成员Block::block然后就可以调用Block::block的成员方法FuncPtr了, 而FuncPtr恰恰是通过 BlockCreate构造实例化block赋值的fun.

2022-07-09 22:53:13 3718

原创 AVFoundation(一) - 捕捉会话&设备

捕捉会话 AVCaptureSession捕捉设备 AVCaptureDevice捕捉设备输入 AVCaptureDeviceInput捕捉设备输出 AVCaptureOutput 抽象类捕捉连接 AVCaptureConnection捕捉预览 AVCaptureVideoPreviewLayerAVCaptureMovieFileOutput定义了方法将QuickTime影片捕捉到磁盘录制到最长时限 或 录制到特定文件大小时为止配置成保留最小可用磁盘空间通常当QuickTime影片准备时,影片头的元数据处

2022-07-09 00:57:21 3053

原创 ios底层核心模板结构 - list_array_tt & entsize_list_tt

list_array_tt 是个模板,存在于runtime头文件中entsize_list_tt 也是个模板,也存在于runtime 头文件中objc类的底层结构 method_array_t property_array_t protocol_array_t 都是继承自list_array_t在 list_array_tt 中 都对应了模板List 元素都是Elementmethod_array_t properties_array_t protocol_array_t 都套用一个通用嵌套模板容器

2022-07-06 04:46:25 3013

原创 ios应用程序加载分析(二)

map_images()镜像文件类的信息 class ro rw protocols 处理arr_init()SideTablesMap.init(); 初始化散列表_objc_associations_init(); 关联对象管理 初始化startWeakTableScan(); 扫描若引用修复selectorFix up old objc_msgSend_fixup call sites实现 (有实现+load方法)的类.........

2022-07-05 22:31:16 3643

原创 ios应用程序加载分析(一)

`_dyld_start`(dyld)->`doModInitFunctions`(dyld)->`libSystem_initializer`(libSystem)->`libdispatch_init`(libdispatch)->`_objc_init`(libobjc)->`registerObjCNotifiers`(dyld): sNotifyObjCMapped=mapped;&&sNotifyObjCInit=init;&&sNotifyObjCUnmapped = unmapped;

2022-07-05 22:09:09 3426

苹果objc开源项目配置mac M1可编译调试版本-841.13

如果想真正了解ios底层原理,除了阅读源码,没有捷径可走,但是没有一个可编译调试的环境,进阶无从谈起,本资源包为想进阶ios底层的小伙伴提供了可编译版本,编译的版本为苹果开源版本objc4-objc4-841.13,M1的电脑的同学也无需担心,此编译版本也兼容M1电脑 通过苹果开放源码与汇编堆栈等方式可以分析ios底层原理 runtime msg block 线程 kvc kvo dispatch xcode clang编译脚本 swift编译脚本 符号问题处理 但前提是当前现有一个从0到1的初始化进程,除了可以方便调试objc源码外,想进阶底层原理的小伙伴多多少少还需要学习一些汇编的知识,不需要复杂,了解能大概看懂就成 调试过程中 需要经常下符号断点进行调试 在此过程中你会慢慢感受到内存偏移的妙处,了解类的设计 以及oc的消息查找机制 此资源作为一个初始梯子搭桥,具体底层探索之路漫漫其修远兮,需要持之以恒的耐心 资源为免费,不管你是intel的架构,还是M1的电脑,调试过程中遇到什么问题欢迎留言,有问必答 有可能的话可以附上一些深层的问题探讨思路 Be Careful

2022-06-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除