自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 一. APP连续闪退修复方案初版

连续闪退设计方案一、概要1.背景用户在使用APP时,在启动阶段crash,将根本无法使用。重启的条件下也无法正常使用的情况,也就称为连续闪退。在这种情况下就需要一种机制去保护并修复它,确保APP可以正常使用。2.发生条件连续闪退的发生原因可能有如下:数据库损坏:在日常使用如异常退出、断电,或者错误的操作。文件损坏:处理文件时如果没有@try…catch,损坏文件会抛出NSException导致 crash。网络返回数据处理异常:比如预期返回数组,但实际返回了字典或返回破损的 Tar 包,在

2021-10-19 14:05:37 988

原创 Swift 中如何使用指针?

前景Swift 中指针被映射为了一个泛型类型,苹果希望我们在Swift开发中尽量减少指针的使用。指针类型都是泛型的 struct,开发者可以通过这个泛型来对指针指向的类型进行约束以提供一定安全性。简介UnsafePointer: 不可变指针类型UnsafeMutablePointer: 可变指针类型UnsafeBufferPointer: 一组连续数据指针COpaquePointer: 非完整结构的不透明指针。。。。使用不可变指针,可以通过 pointee 属性进行取值。 可变指针可以

2021-08-17 20:11:08 312

原创 IOS 在局域网下添加云硬件设备方案

一.前景在云硬件设备与手机接入了局域网的情况下,需要将硬件设备扫描展示出,并可选择,与当前手机设备账号进行关联。二.实现方案流程图如下图所示三.方案的代码实现本次采用 Swift 语言,基于 CocoaAsyncSocket 中的UDPSocket手机端代码如下:/// socket实例var asycUdpSocket: GCDAsyncUdpSocket!func didload() { asycUdpSocket = GCDAsyncUdpSocket() asycUdpS

2021-07-02 16:26:47 256

原创 IOS APP 逆向安全攻防入门

iOS APP 逆向安全攻防的几个简单方法。以下提供几个简单的检测机制,来检测APP是否经过非正规途径进行安装,我们可以通过这些方法进行安全防护操作。A. 检查 BundleID采用MonkeyDev 重签名,会更改 BundleIDfunc checkBundleID() { let infoDic = Bundle.main.infoDictionary let bundleID = infoDic?["CFBundleIdentifier"] as? String if

2021-06-25 14:07:56 614

原创 IOS 静态库/动态库制作流程

二.制作流程1.打开Xcode->File-> New->Project ->Framework&Library ->Framework ->next2.TARGETS —> Build Settings 一些设置:(Build Active Architecture Only 设置为NO的意思是当前打包的.framework支持所有的设备.否则打包时只能用当前版本的模拟器或真机运行.)Build Setting 设置Dead Code Strip

2021-04-28 17:50:57 364

原创 IOS 项目包瘦身(二)

项目瘦身一.资源文件排查删除二. 本次采用的工具是 LSUnusedResourcesa.步骤下载链接https://github.com/tinymind/LSUnusedResourcesgit 下载地址下载后打开Xcode运行LSUnusedResources.xcodeproj,运行后如下图Project Path 中填入需要优化的项目地址(打勾的部分是按什么规则去检测出未使用的资源。)最后逐一排查,删除未使用的资源文件。三. 注意事项防止项目中采用字符串拼接方式进行图片资

2021-03-22 13:56:32 137

原创 IOS 项目包瘦身(一)

项目瘦身一.日常的项目经过长时间的迭代,优化,重构之后,可能会积累一些用不到了的类,长久下去,会影响我们的包大小。主要删除项目中未使用的类。删除项目中未使用的资源文件压缩项目中大型资源文件二. 首先针对未使用的类使用脚本可以检测出项目中未使用的类。 (可评论咨询)a. 检测原理: 未使用的类 = 项目中所有的类 - 项目中被引用的类 - 实现load方法的类 - 实现load方法的分类 - 项目中使用字符串表示的类 - 子类被引用它的父类 - (只被当作属性没用被使用的类)。b.实现

2021-03-04 10:53:49 228 2

原创 接入百度本地OCR(文字识别)集成教程

接入百度本地OCR(文字识别)集成教程一. 简介:EasyEdge端计算模型生成平台可基于多种深度学习框架、网络结构的模型,快捷生成端计算模型及封装SDK,适配多种AI芯片与操作系统。文字识别,多场景、多语种、高精度的文字检测与识别服务,多项ICDAR指标居世界第一;广泛适用于远程身份认证、财税报销、文档电子化等场景,为企业降本增效;提供稳定易用的在线API、离线SDK、软件部署包多种服务形式,适配各种应用场景。本次采用百度训练好的模型接入,避免了识别进行网络请求操作。二. 接入教程:打开e

2020-10-27 09:28:25 3259 9

原创 数据结构 树的遍历算法(递归与非递归的实现)

采用Swift 5节点定义非递归的遍历

2020-08-24 17:59:46 486

原创 Apple Pay 接入

Apple pay 整体接入流程一 . 简介Apple Pay,是苹果公司在2014苹果秋季新品发布会上发布的一种基于NFC的手机支付功能,于2014年10月20日在美国正式上线。官网链接apple pay developer二. 整个流程中如下:客户端通过苹果API,在 APP 应用内展示 Apple Pay 支付控件。(注意: 和其他支付入口一样醒目)用户在 Apple Pay 的支付控件上进行生物验证(指纹或者人脸识别)或者手机密码验证。苹果在用户验证通过之后,会生成一个用户选中的银行卡

2020-06-28 17:01:35 1004

原创 音视频-MP3编码-Swift

一.配置swift5lame 下载地址,下载后编译出的lame库二.背景调用lame来做MP3Encoder,lame库是C++语言,在使用用lame库要学会swift 调用C++ 的方式,由于Swift 不能直接调用C++,我采用的方式是调用C,间接调用C++三.步骤创建项目,再添加C++文件会自动生成桥接文件,如下: 分别在.hpp 和 .cpp文件中编写声明和实现。...

2020-05-06 09:35:19 386

原创 移动网络慢

移动网络有如下几个不稳定特点(“高时延”、“易抖动”、“通道窄”)1)移动状态网络信号不稳定,高时延、易抖动丢包、通道狭窄;2)移动状态网络接入类型和接入点变化频繁;3)移动状态用户使用高频化、碎片化、非WIFI流量敏感;移动网络为什么慢?1.DNS解析,这个在有线互联网上司空见惯的服务,在移动互联网上变成了一种负担,一个往复最少1s,还别提遇到移动运营商DNS故障时的尴尬。2.链路建...

2020-04-27 15:25:04 567

原创 红黑树基础与代码 - 节点的删除(三)

1.节点的删除红黑树与二叉搜索树的删除节点过程一样,当删除节点存在两个子节点,会被转换为删除有一个子节点或不存在子节点的节点。对于有一个子节点的节点删除,比较简单,不需要平衡调整,只需要将其子节点改为黑色即可。2.删除规则对于删除的节点有两个不为空的叶子节点,这种情况最为复杂,需要平衡调整。删除节点平衡调整的情况有如下几种待删除节点的兄弟节点是红色待删除节点的兄弟节点是黑色,且兄弟...

2020-03-12 11:35:09 186

原创 红黑树基础与代码 - 节点的插入(二)

一. 节点的插入节点的插入会破坏红黑树结构,所以我们要做变色和旋转操作,节点的变色和旋转是为了修正被破坏的红黑树, 使其符合红黑树的规则,从新达到平衡状态。红黑树的节点插入与二叉查找树的插入的过程是一样的,只是最后多了一步平衡调整操作,插入到红色节点下时才需要调整,因为插入到红色节点下违反了两个红色节点不能相邻规则。二. 插入规则插入节点平衡调整的几种情况如下:情况一:新插入节点的父节...

2020-03-05 18:38:18 128

原创 红黑树基础与代码(一)

一. 定义和性质 红黑树是一种含有红黑结点并能自平衡的二叉查找树,红黑树并不是一个完美平衡二叉查找树,红黑树的左子树和右子树的黑结点的层数是相等的,也即任意一个结点到到每个叶子结点的路径都包含数量相同的黑结点。所以我们叫红黑树这种平衡为黑色完美平衡.它必须满足下面性质:性质1:每个节点要么是黑色,要么是红色性质2:根节点是黑色性质3:每个叶子节点(NIL)是黑色性质4:每个红色结...

2020-03-05 18:00:02 146

原创 Alamofire -安全认证

基于Alamofire 5.0.0 分析网络的安全认证。同时介绍一些 HTTP 与 HTTPS 的一些相关知识HTTP 特性无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这...

2020-01-06 00:41:25 1073

原创 IOS-启动优化

采用二进制重排1. 如何进行二进制重排?2. 为什么重排后启动会变快?由于内存是由分页进行管理,将启动的函数排列在前面,就不需要一页一页的去定位函数符号地址,加快启动。3. 如何知道哪些函数是启动时调用的?可以采用fishhook 去hook掉msg_send 方法,获取到启动函数,然后再进行重排编译运行。注意并不是所有项目都能有明显启动优化效果,只有对于大型复杂项目才会有明显的启动...

2019-12-30 23:28:44 127

原创 IOS-内存对齐

一. 内存对齐是什么?在计算机中,内存大小的基本单位是字节,理论上来讲,可以从任意地址访问某种基本数据类型。但是实际上,计算机并非按照字节大小读写内存,而是以2、4、8的倍数的字节块来读写内存。因此,编译器会对基本数据类型的合法地址作出一些限制,即它的地址必须是2、4、8的倍数。那么就要求各种数据类型按照一定的规则在空间上排列,这就是对齐。在iOS开发过程中,编译器会自动的进行字节对齐的处理...

2019-12-30 18:11:00 288

原创 二. OpenGL - 坐标系

坐标系的详细概念世界坐标系: 坐标系统主要⽤用于计算机图形场景中的所有图形对象的空间定位和定义 。局部坐标系: 独⽴立于世界坐标系来定义物体⼏几何特性 。观察坐标系: 观察坐标系通常是以视点的位置为原点,通过⽤用户指定的⼀一个向上的观察向量量来定义整个坐标系统,观察坐标系主要⽤用于从观察者的⻆角度对整个世界坐标系内的对象进⾏行行重新定位和描述,从⽽而简化⼏几何物体在投影⾯面的成像的数学推导...

2019-12-23 19:14:17 199

原创 二. OpenGL - 深度测试

我们使用的是Z-buffer方法,也叫深度缓冲区Depth-buffer。深度缓冲区(Detph buffer)同颜色缓冲区(color buffer)是对应的,颜色缓冲区存储的像素的颜色信息,而深度缓冲区存储像素的深度信息。在决定是否绘制一个物体的表面时,首先将表面对应像素的深度值与当前深度缓冲区中的值进行比较,如果大于等于深度缓冲区中值,则丢弃这部分;否则利用这个像素对应的深度值和颜色值,...

2019-12-23 18:47:54 233

原创 一. OpenGL - 3D

OpenGL 是一种用于创建实时3D图像的编程接口。我们可以通过透视、隐藏直线消除、颜色、着色、和其他技巧来创建深度幻觉。3Da. 简介3D表示一个正在描述或者显示的物体有三个维度,分别是宽度,高度和深度。通过这三个维度让人感觉立体。计算机3D图像的实质上也是平面的,它只是在计算机的屏幕上所显示的二维图像,但它可以通过提供深度的错觉。可以通过一个简单的说明:2D + 透视 = 3Db...

2019-12-08 01:41:35 214

原创 一.IOS逆向工程

一概念逆向工程就是通过分析一个程序或者系统的功能与结构或者行为,将它的技术实现或者设计细节推到出来的过程。对于一个拿不到源码的软件感兴趣就可以通过逆向工程的方式来分析它。二 OSX 工具介绍1. class-dump它就是用来dump目标对象的class信息的工具。它利用Objective-C语言的runtime特性,将存储在Mach-O文件中的头文件信息提取出来,并生成对应的.h文...

2019-12-03 01:02:37 173

原创 八.汇编-转移指令的原理

可以修改IP,或者同时修改CS和IP的指令统称为转移指令。或者说转移指令就是可以控制CPU执行内存中某处代码的指令。8086CPU 转移行为可以有以下几类指修改IP,称段内转移,如 jmp ax同时修改CS 和IP ,称为段间转移,如。jmp 1000:0短转移的IP的修改范围 -128-127近转移IP的修改范围-32768-327678086CPU的转移指令分为无条件转移 ...

2019-11-26 15:29:39 156

原创 IOS-自动化打包-Jenkins集成

一.简介 自动化是指机器设备、系统或过程(生产、管理过程)在没有人或较少人的直接参与下,按照人的要求,经过自动检测、信息处理、分析判断、操纵控制,实现预期的目标的过程。自动化技术广泛用于工业、农业、军事、科学研究、交通运输、商业、医疗、服务和家庭等方面。 把重复且无技术含量的事情交给机器去做,为了较少不必要的打包时间浪费,自动化打包技术就由此而生。 我的项目是基于Jenkins自动...

2019-10-28 14:40:59 196 1

原创 七.汇编-数据处理的两个基本问题

计算机是用来进行数据处理和运算的机器。处理数据在什么地方?处理数据有多长?1. 机器指令处理数据在什么地方a. 绝大多数的机器指令都是处理数据的指令。处理数据大致可分为读取,写入,运算。b. 指令在执行前,所要处理的数据可以在 3 个地方: CPU 内部,内存,端口。2.汇编语言中数据位置的表达a. 有三类:立即数(idata)寄存器段地址 和 偏移地址3. 寻址方...

2019-09-30 00:02:08 134

原创 六.汇编-更灵活的定位内存地址的方法

可以用[0],[bx]的方法访问内存的指令中,定位内存单元的地址。1.and 和 or 指令a. and 指令,按位进行与运算。b.or 指令,逻辑或指令,按位进行或运算。2. 关于ASCII码a.计算机中所有的信息都是二进制的,而人能理解的信息是已经具有约定意义的字符。编码存储信息,解码展示信息。b.目前计算机通常采用的编码方式 ASCII编码,也就是一套编码规则。比如 a 就是编码...

2019-09-29 00:03:39 119

原创 五.汇编-包含多个段的程序

将代码,数据,栈存放到不同的段中1. 在代码段中使用数据a. dw(define word) 定义字型数据。b. 通过“end 标号”来控制CPU从何处开始执行程序。c. 大体结构如下(代码框架)assume cs:code code segment 数据定义 start: 代码 code ends end start2. 在代码中使用栈a. 通过栈来处理数据。3...

2019-09-27 00:24:44 152

原创 四.汇编-第一个程序

之前都是在debug下执行一些指令。1.一个程序从写到执行的过程a.流程简单概括编写汇编源程序对源程序进行编译连接执行可执行文件中的程序b.可执行文件包括两部分,程序(由编译翻译过来的机器码)以及数据。第二部分相关的描述信息(如程序大小,占用内存容量等)c. 操作系统根据可执行文件的描述信息,将可执行文件中的数据和机器码载入到内存当中,并进行相关的初始化,然后由CPU执行程序。...

2019-09-25 20:55:40 156

原创 三.汇编-寄存器(内存访问)

1.内存中字的存储a.CPU 中用16位寄存器来存储一个字。高8位放在高位字节,低8位放在低位字节。2.DS和【adress】a.CPU 要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086PC中内存地址是由于CS和IP组成。8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址。思考? 为什么8086CPU不支持直接向DS(段寄存器)中写入数据操作?(简单理解为...

2019-09-24 00:28:57 150

原创 二.汇编-寄存器

一个典型的CPU是由运算器,控制器,寄存器组成。这些器件靠内部总线相连,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件的之间的联系,外部总线实现CPU和主板其他器件的联系。在CPU中运算器进行信息处理寄存器进行信息存储控制器控制各个器件间工作内部总线连接各个器件,在他们之间进行数据的传送1.通用寄存器a. 8086CPU所有寄存器都是16位的,可以存放两个字节。AX...

2019-09-19 23:53:43 201

原创 一.汇编基础

汇编语言是直接在硬件之上的编程,接下来我们先介绍相关的基础知识概念。1.机器语言a .机器语言是机器指令的集合。机器指令可以理解为一台机器可以正确执行的命令。 b.每一种微处理器,由于硬件设计和内部结构的不同,就需要不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。2.汇编语言a.由于机器语言的带来的麻烦,由此汇编语言的产生。b.汇编语言的主体是...

2019-09-18 08:02:30 154

原创 IOS-卡片抽屉效果

IOS-卡片抽屉效果git地址:模仿豆瓣的卡片抽屉模仿豆瓣APP的抽屉弹出效果,采用Swift5####效果图如下二. 实现步骤1.主要通过UIPanGestureRecognizer和UIViewPropertyAnimator一起协作完成此效果。2 通过UIPanGestureRecognizer的State进行相关的处理。3.核心在于动画的暂停,根据释放手势时候,进行处理动画...

2019-08-13 01:25:24 685

空空如也

空空如也

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

TA关注的人

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