自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试什么时候用copy,strong,@property本质

面试经常问什么时候用copy,strong不可变的用copy修饰 可变的用strong- (void)testNOChange{ NSString *str = @"123"; NSLog(@"str = %p",str); str = @"456"; NSLog(@"after str = %p",str); /* 2021-07-22 14:01:48.151382+0800 ProtocolTest[7759:511625] str = .

2021-07-22 18:35:24 172

原创 LLVM学习

LLVM是一系列编译器和工具链技术的集合,模块化,可重用.专门为编程语言编写的程序编译时,链接时,运行时优化而设计.传统编译器分为前端、优化器、后端前端负责解析源代码,检查语法错误,将其翻译为抽象的语法树优化器对这一中间代码进行优化,试图使代码更高效后端将优化后的中间代码转为目标机器代码,最大化利用目标机器的特殊指令,提高代码性能前端解析器 + IR生成器 + LLVM后端目前xcode的前端使用 Clang...

2020-09-02 14:39:53 264

原创 ARM汇编基础

ios现在都是arm64汇编x0 - x7 用于子程序调用时的参数传递,超过八个会放到线上传递x0和w0时同一寄存器的不同尺寸,x0为8字节,w0为4字节,x0寄存器的低位4字节x0/w0还可以用于返回值的传递 ;是注释符号mov x1, x0 ;将寄存器x0 赋值给x1add x0,x1,x2 ;x0 = x1 + x2sub x0,x1,x2 ;x0 = x1 - x2mul x0,x1,x2 ;x0 = x1 * x2sdiv x0,x1,x2 ...

2020-09-01 19:09:33 1658

原创 有关APP架构设计的思路

涉及到组件化,模块化,里面有一个就是路由router来实现模块间的通信.

2020-07-24 16:51:02 2561

原创 fishHook的原理

在一些逆向过程中常常通过代码注入的方式来hook,在OC里面我们常常通过runtime交换imp来hook,但是今天我们试试facebook开源的fishhook,来了解对系统C函数的hookHOOK,俗称钩子,是iOS逆向中改变程序运行流程的一种技术,通过hook让别人的程序执行我们自己写代码.今天我们主要来学习下fishhook,是Fachbook提供一个动态修改链接Mach-O文件的工具,利用MachO文件加载原理,通过懒加载/非懒加载两个表的指针达到C函数Hook的目的.#import

2020-07-21 19:07:30 413

原创 iOS中深浅拷贝

面试时我们总会被问到你理解深拷贝和浅拷贝的区别吗浅拷贝是复制一个新的指针,指向同一块内存区域深拷贝是内容拷贝,拷贝数据到一块新区域内存,指针指向拷贝的数据去strong是浅拷贝可变字符串或数组(NSMutable)在copy后会发生深拷贝,拷贝出来的是一个NSTrggedPointerString,是一个不可变字符串不可变字符串或数组(NSString)在copy后会发生浅拷...

2020-03-10 23:40:26 189

原创 HTTPS原理

HTTPS的实现原理HTTPS协议之所以是安全是因为HTTPS协议会对传输的数据进行加密,而加密过程是使用非对称加密实现HTTPS在内容传输的加密上使用的是对称加密,非对称加密只左右在证书验证阶段证书验证阶段1.浏览器发起HTTPS请求2.服务端返回HTTPS证书3.客户端验证证书是否合法,不合法提示警告数据传输阶段 1.当证书合法后,在本地生成随机数 2.通...

2019-12-08 21:37:56 197

翻译 二叉树

树这种数据结构,和数组、链表不一样,是一种非线性结构今天来了解下二叉树A是B的父节点, B是A子节点 , D是B的兄弟节点 C,D是叶子节点 ,A是根节点二叉树是除了叶子节点,其余每个节点仅且只有两个子节点满二叉树: 叶子节点全在最底层, 除了叶子节点之外, 每个节点都有左右两个子节点完全二叉树: 叶子节点都在最底下两层, 最后一层的叶子节点都靠左排列,除了最后一层,其他层的节点个数...

2019-11-27 14:00:33 208

原创 25匹马赛跑,有一个赛场,只有五个赛道,没有计时器,只能通过目测来记录快慢,求出第三3快的马要多少场比赛?

25匹马赛跑,有一个赛场,只有五个赛道,没有计时器,只能通过目测来记录快慢,求出第三3快的马要多少场比赛?思路:我们分5组:A组: A1 A2 A3 A4 A5B组: B1 B2 B3 B4 B5C组: C1 C2 C3 C4 C5D组: D1 D2 D3 D4 D5E组: E1 E2 E3 E4 ...

2019-08-27 23:26:51 4299 6

原创 算法学习题目:已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位

2019年阿里面试题中的一道题目:已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位。* 考察点基础算法的灵活应用能力(二分法学过数据结构的同学都知道,但不一定往这个方向考虑;如果学过数值计算的同学,应该还要能想到牛顿迭代法并解释清楚) 退出条件设计* 解决办法1. 已知 sqrt(2)约等于 1.414,那么就可以在(1.4, ...

2019-08-22 12:00:09 1061

原创 算法-插入排序

- (void)logInsertionSortingArray { NSMutableArray * arr = @[@(16),@(1),@(2),@(9),@(7),@(12),@(5),@(3),@(8),@(13),@(10)].mutableCopy; for (int i = 1; i < arr.count; i++) { int j = i...

2019-08-19 00:27:08 105

原创 算法-选择排序

选择排序就是每一轮选出最小者交换到左侧的思路,或者选出最大这交换到最右侧的思路这种排序的最大优势就是省去多余的元素交换OC代码:- (NSArray *)selectSort:(NSArray *)sort{ NSMutableArray *array = [NSMutableArray arrayWithArray:sort]; for (int i =0; i &l...

2019-08-18 20:17:50 103

原创 iOS-对象的本质-一个OC对象占多少内存

我们平常敲的Objective-C代码,底层实现其实是C/C++代码.那么一个OC对象占用多少内存.iOS开发中Objective-C和swift用的是Clang/LLVM来编译的.使用的clang编译器编译成cpp,xcodebuild负责将OC/Swift工程编译成xxx.app,xcrun负责给xxx.app签名并打包成xxx.ipa#import <Foundation...

2019-08-16 19:26:59 2772

原创 数据结构-单链表

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.以结点来表示,每个结点是由元素 + 指针组成.以结点的序列表示线性表称作线性链表(单链表),单链表是链式存取的结构.单链表设头指针head指向开始结点/** 创建一个单链表 */typedef struct _Sample_List{ int Data; struct _Sample...

2019-08-01 17:54:55 166

原创 什么是红黑树

红黑树是一种自平衡二叉查找树,是一种数据结构.二叉查找树的特性:1.左子树上所有结点的值小于或等于它的根节点的值.2.右子树上所有结点的值均大于或等于它的根节点的值.3.左右子树也分别为二叉排序树.二叉查找很方便,查找所需的最大次数等同于二叉查找树的高度.二叉查找树多次插入新节点而导致的不平衡呢?这个时候用到了红黑树,它的特点:1.节点是红色或黑色2.根节点是黑色3.每个叶子节...

2019-07-30 23:48:07 192

原创 算法-冒泡排序优化版

冒泡排序是一种最基本的交换排序,把相邻的元素两两比较,根据大小来交换元素的位置.原始的冒泡排序是稳定排序,需要遍历所有元素,时间复杂度是O(N^2)我用OC来写这个算法,分别写了三个,后两个是在基础上进行优化的,以最后一个优化的为准./** 这是冒泡排序第一版 @param list NSArray *date = @[@"5",@"8",@"6",@"3",@"9",@"2"...

2019-07-30 00:19:45 131

原创 算法-动态规划-走台阶问题

有一道经典题目:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶,要求程序求出一共多少中走法.第一种方法:暴力的利用排列组合,写一个多层嵌套循环遍历出所有的可能性,但是时间复杂度是指数级的.这里就用到了动态规划,当然也有递归的思想,我们假设你只差一步就到第10级台阶,会出现什么情况?只会出现两种情况,一种是从9级走到10级,一种是8级走到10级利用递归的思想,10...

2019-07-28 19:44:11 696

原创 跳跃表是什么

加入我们要开发一个游戏里面类似拍卖行的搜索功能,我们要支持输入道具名称的精准查询和不输入名称的全量查询.拍卖行商品数量几十万件,对应数据库商品表的几十万条记录,按照商品名称精准查询好办,可以直接冲数据库查出来,如果没有商品名称的全量查询怎么办?总不能把数据库所有记录查出来,还要支持不同字段的排序.拍卖行商品列表是线性的,最容易表达线性结构的是数组和链表,但是数组使用二分查找可以最快定位,时间...

2019-07-28 12:39:44 222

原创 算法逻辑题-海盗分金币问题

有5个海盗,获得了100枚金币,他们约定一个分配方案.商议方式:1.有5个海盗轮流提出分配方案 2.如果超出半数海盗(包括提出者)同意该方案,则按照该方案分配 3.如果同意该方案的人数(包括提出者)小于等于半数,则提出者要被扔到海里喂鱼,剩余海盗继续商议分配 4.海盗们是绝对理性的,以自己尽可能获得金...

2019-07-26 12:39:48 9939

原创 初次体验-Flutter环境配置遇到的坑

在配置Flutter的环境时,我真的是超级无语了,各种坑.鉴于国内的环境,配置环境按照国内环境配置来走:中文网Flutter环境配置最后出现这个就ok了,中途报哪个配置有问题,按照提示走就行了,有的时候你可能需要让子弹飞一会儿,毕竟网络这玩意,有时候超乎你想象的坑.在用AndrodiStudio创建一个flutter工程时,出现了下面这些问题遇到flutter packages get卡住...

2019-07-16 11:00:34 410

原创 iOS总结-APP启动过程-main()函数执行前

APP启动的快慢,直接决定了用户的体验好坏,毕竟往往第一印象是真的很重要的!APP启动分为三个阶段:main函数执行前,main函数执行后,首屏渲染完成后.main启动前:首先说下Mach-O文件Mach-O文件格式是OSX与iOS系统上的可执行文件mach-o主要分为三部分:Header头部,保存了一些基本信息,包含可以执行的CPU结构,比如x86,arm64LoadComm...

2019-07-05 16:16:46 1040

原创 iOS总结-有关CAAnimation

有关动画,我们可能用UIView的动画,或是会用到CABasicAnimation比较多一点.有关CAAnimation的基础知识结构图,我简单画了个图CABasicAnimation通过设置keyPath来设置类型duration:动画时长fromValue/toValue 动画起始位置,根据keypath不同,传值不同.reaptCount重复次数设置动画在执行结束后不返回原来位...

2019-07-02 18:48:15 199

翻译 有关APP架构的感想

参考:https://tech.antfin.com/docs/2/49549 读CodeHub#1 回顾 | 敏捷开发与动态更新在支付宝 App 内的实践这篇文章可以详细的了解有关支付宝在移动端如何变成一个超级APP的.支付宝的实现的移动中台覆盖了APP生命全周期,提供强大的支撑,形成了有力的闭环。我们经常会被问到有关架构的设计的问题,参照支付宝这个超级App的架构,我们能学习到很多...

2019-04-23 00:19:52 164

翻译 CFNetwork框架解析(一)

iOS网络编程层次模型分为三层:Cocoa层:NSURL, GameKit,WebKitCore Foundation层: 基于C的CFNetwork 和 CFNetServicesOS层:基于C 的 BSD socketCFNetwork只是对BSD socket 进行了轻量级的封装,但在iOS中使用CFNetwork的好处是CFNetwork与系统级别的设置以及runloop结合很好,...

2019-03-13 16:31:09 2640

翻译 总结-Java基础之(二)

学习地址:http://www.runoob.com/java/java-modifier-types.htmlCharacter类用于对单个字符进行操作,在对象中包装一个基本类型char的值String类StringBuffer类 / StringBuilder类StringBuffer是线程安全的,多数情况下用StringBuffer数组java的时间日期Java的集合...

2019-01-23 23:22:27 96

翻译 总结-Java基础之(一)

学习地址:http://www.runoob.com/java/java-intro.htmlJava的语法与C语言和C++语言很接近,丢弃了C++中一些特性,如操作符重载、多继承、自动的强制类型转换。Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。Java语言是面向对象的:Java语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单...

2019-01-14 20:10:10 167

翻译 数据结构和算法总结(一)

复习有关数据结构的基础知识,参考百度百科数据结构是计算机存储,组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.精心选择的数据结构能带提高更高的运行或存储效率.数据结构是指同一数据元素类中各数据元素之间存在的关系.分为: 逻辑结构/ 存储结构(物理结构)/数据的运算数据的逻辑结构: 反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,...

2019-01-10 20:06:11 301

翻译 iOS总结-网络DNS

参考: https://github.com/ChenYilong/iOSBlog/blob/master/Tips/基于Websocket的IM即时通讯技术/防%20DNS%20污染方案.mdhttps://www.jianshu.com/p/cd4c1bf1fd5f有关DNS劫持和DNS污染区分DNS解析:计算机会向我们的运营商(电信、移动、联通)发出网络请求,运营商收到请求后会到自己...

2019-01-09 15:21:03 1373

翻译 iOS总结-锁(二)之synchronized的内部实现原理

参考:http://ios.jobbole.com/82826/关于@synchronized,我们经常应用到写单例的时候,在多线程的情况下,进行加锁操作.锁是如何传入@synchronized的对象关联上的?如果传入@synchronized的对象在@synchronized的block里面被释放或者被赋值为nil会怎样?@synchronized block 会变成objc_sync_...

2019-01-09 14:34:35 3093

翻译 iOS总结-锁(一)

参考:https://www.jianshu.com/p/8b8a01dd6356在平时开发中,我们经常使用到多线程,但是同时会带来Data race .而我们可以用到锁,我们在使用多线程的时候多个线程可能会被访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁应运而生。ibireme大神不在安全的OSSpinLock  中有关9种锁...

2019-01-08 19:54:33 147 2

翻译 iOS总结-IM即时通讯之传输协议-ProtocolBuffer

参考:https://www.jianshu.com/p/2dbb360886a8http://www.qingpingshan.com/rjbc/ios/181571.html使用ProtocolBuffer 减少Payload滴滴打车40%, 采用高效安全的私有协议, 支持长连接的复用,稳定省电省流量高效: 提高网络请求成功率,消息体越大,失败几率随之增加省流量: 流量消耗极少,省流...

2019-01-03 19:53:40 807

翻译 iOS总结-Socket的分析(四)-MQTT基础

参考:https://www.jianshu.com/p/2dbb360886a8MQTT是一个聊天协议,比webSocket更上层,属于应用层。基本作用就是简单的发布订阅。适合它的场景为订阅发布这种模式的。如微信的实时共享位置,滴滴地图上小车移动、客户端推送等功能。基于MQTT的框架MQTTKit,是有c来写的,分为初始化、连接、发布、订阅、取消订阅一个基于MQTTKit的基础订阅d...

2019-01-03 00:00:58 319

翻译 iOS总结-Socket的分析(三)

参考:https://www.jianshu.com/p/2dbb360886a8   什么是心跳?简单来说,心跳就是用来检测TCP连接的双方是否可用.虽然TCP的KeepAlive机制只能保证连接的存在,但是并不能保证客户端以及服务端的可用性. 如果某台服务器因为某些原因导致负载超高, CPU100%,无法响应任何业务请求,但是使用TCP探针则仍旧能确定连接状态,这就是典型的链接活着但是业...

2019-01-02 19:48:53 196

翻译 iOS学习-即时通讯音视频(二)之视频编解码基础

参考大神:http://www.52im.net/thread-232-1-1.html编码层次组成:序列 (Sequence) 图像组(Group of Pictures, GOP)  图像(Picture)  条带(Slice) 宏块(Macroblock, MB) 块(Block)层次的(Hierarchical)码流结构:PB帧编码 IBBP序列编码对象  序列 是指一段...

2018-12-28 23:58:47 305

翻译 iOS学习-即时通讯音视频(一)之视频编解码之理论

参考大神:http://www.52im.net/thread-228-1-1.html实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体。视频为何需要压缩?1.未经压缩的数字视频的数据量巨大 2. 存储困难,一张DVD只能存储几秒钟的未压缩数字视频 3. 传输困难 1M的带宽传输1秒的数字电视视频需要大约4分钟视频主要压缩了什么?原始视频压缩的目的是去除冗余信息...

2018-12-28 14:30:32 510

翻译 iOS总结-Socket的分析(二)之什么是Socket?

对于Socket,我也是自己慢慢学习,参考大神文章https://www.jianshu.com/p/2dbb360886a8https://blog.csdn.net/yeyuangen/article/details/6799575什么是Socket? socket引入是为了解决不同计算机间进程间通信问题socket与进程间的关系: socket用来让一个进程和其他的进程互相信息,而So...

2018-12-27 15:35:51 120

翻译 iOS总结-Socket的分析(一)

对于Socket,我也是自己慢慢学习,参考大神文章https://www.jianshu.com/p/2dbb360886a8实现IM方式中,第一种方式,使用第三方IM服务,对于短平快公司,采用第三个sdk实现,如云信,环信,融云,LeanCloud.第三方服务商IM底层协议基本上都是TCP.使用第三方sdk甚至不需要自己去搭建IM后台.缺点: 定制化程度太高,很多东西不可控.需要费用.如果...

2018-12-26 19:05:11 1083

翻译 iOS总结-有关动画基础之CoreGraphics、Quartz2D、QuartzCore、CoreAnimation的总结

参考:https://blog.csdn.net/make___/article/details/45576857https://www.jianshu.com/p/397690fd4555一直对于CoreGraphics, QuartzCore, CoreAnimation区分不清楚。CoreGraphics,核心图形。它是ios的核心图形库,平时使用最频繁的point,size,rect等...

2018-12-23 14:44:03 628

翻译 iOS总结-有关动画总结基础CoreAnimation之CAShapeLayer基础

参考: https://www.jianshu.com/p/139f4fbe7b6bCAShapeLayer属于QuarzCore框架,继承自CALayer. CAShapeLayer是在坐标系内绘制贝塞尔曲线的,通过绘制贝塞尔曲线,设置CAShapeLayer的path,从而绘制各种各样的图形以及不规则图形。使用CAShapeLayer需要与UIBezierPath一起使用。通俗点UIBez...

2018-12-21 00:25:45 107

翻译 iOS总结-有关动画总结基础之UIBezierPath基础(二)

参考: https://www.jianshu.com/p/c883fbf52681UIBezierPath这个类在UIKit中,是Core Graphics框架关于path的一个封装,可以定义简单的形状,如直线,圆弧,矩形,圆形,不规则的多边形.UIBezierPath基本使用方法UIBezierPath对象时CGPathRef数据类型的封装.一般使用UIBezierPath都是重写vie...

2018-12-20 20:22:37 171

空空如也

空空如也

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

TA关注的人

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