![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IOS底层原理
文章平均质量分 90
铭记_
如果你发现了通向成功的道路,那么请不要放弃!!
展开
-
iOS开发中使用Masonry布局实现动画原理
一、案例:我们这里初始按钮是一个很小的按钮,点击就不断放大,最大就放大到全屏幕。核心代码如下:@interface TotalUpdateController ()@property (nonatomic, strong) UIView *purpleView;@property (nonatomic, strong) UIView *orangeView;@property (nonatomic, assign) BOOL isExpaned;@end@implementat原创 2021-03-24 14:52:23 · 2051 阅读 · 0 评论 -
iOS Zombie Objects(僵尸对象)原理探索
1. Zombie Object 有什么用僵尸对象一种用来检测内存错误(EXC_BAD_ACCESS)的对象,它可以捕获任何对尝试访问坏内存的调用。 如果给僵尸对象发送消息时,那么将在运行期间崩溃和输出错误日志。通过日志可以定位到野指针对象调用的方法和类名。2. 如何开启Zombie Object检测在Xcode中设置Edit Scheme -> Diagnostics -> Zombie Objects3. 开启Zombie Object检测后,对象调用dealloc方法会发生转载 2021-03-15 14:48:36 · 1601 阅读 · 0 评论 -
iOS中为什么必须在主线程操作UI
在开发过程中,我们或多或少会不经意在后台线程中调用了UIKit框架的内容,可能是在网络回调时直接imageView.image = anImage,也有可能是不小心在后台线程中调用了UIApplication.sharedApplication。而这个时候编译器会报出一个runtime错误,我们也会迅速的对其进行修正。但仔细去思考,究竟为什么一定要在主线程操作UI呢?如果在后台线程对UI进行操作会发生什么?在后台线程对UI进行操作不是可以更好的避免卡顿吗?这篇文章就是基于这样一些疑问而产生的。太长转载 2021-03-01 17:43:52 · 938 阅读 · 0 评论 -
手撸LRU算法C++实现
LRU 算法就是一种缓存淘汰策略,计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继续使用。那么,什么样的数据,我们判定为「有用的」的数据呢?LRU 的全称是 Least Recently Used,也就是说我们认为最近使用过的数据应该是是「有用的」,很久都没用过的数据应该是无用的,内存满了就优先删那些很久没用过的数据。举个简单的例子,安卓手机都可以把软件放到后台运行,比如我先后打转载 2021-02-25 15:27:58 · 563 阅读 · 2 评论 -
iOS 图像渲染过程解析
我们先假设这样一个场景:就是点击一个按键,然后实现一张图片的动画移动。场景.gif代码如下:#import "FJFNineViewController.h"@interface FJFNineViewController ()// boxImageView@property (nonatomic, strong) UIImageView *boxImageView;@end@implementation FJFNineViewController- (void)v.转载 2020-12-31 15:14:48 · 1049 阅读 · 0 评论 -
IOS开发关于容器控制器的一些思考
背景在IOS开发中,容器类视图控制器有UINavigationController、UITabBarController以及UISplitViewcontroller这么三种。当我们自己要去实现一个视图控制器容器的时候,我们需要做以下操作:1、我们需要创建一个subViewController2、调用[self addChildViewController:self.controller1];3、执行[self didMoveToParentViewController:self.con原创 2020-12-15 21:01:38 · 363 阅读 · 0 评论 -
IOS开发底层dealloc释放细节探究
大家都知道ARC后是不能显示地调用dealloc方法,但是可以重载此方法。突然考虑到如果父类有属性需要释放,而子类重写了此方法,且重写子类dealloc时不能调用[super dealloc]会不会把父类的方法覆盖了写了个测试类@interface ClassA:NSObject @end @implementation ClassA-(void)dealloc{ NSLog(@"dealloc ClassA");}@end @interface Class原创 2020-12-10 17:05:36 · 829 阅读 · 0 评论 -
KVO底层原理探究
问题iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 如何手动触发KVO首先需要了解KVO基本使用,KVO的全称 Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。- (void)viewDidLoad { [super viewDidLoad]; Person *p1 = [[Person alloc] init]; Person *p2 = [[Person alloc] init]; p1.a.转载 2020-12-10 15:37:17 · 120 阅读 · 0 评论 -
iOS触摸事件全家桶
好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是已经被响应链、手势、target-action这一系列响应触摸事件的方式折腾到不会打Hello World?现在 是时候带你上分了~ (强行YY完毕)本文主要讲解iOS触摸事件的一系列机制,涉及的问题大致包括:触摸事件由触屏生成后如何传递到当前应用? 应用接收触摸事件后如何寻找最佳响应者?实现原理? 触摸事件如何沿着响应链流动? 响应链、手势识别器、UIControl之.转载 2020-12-08 23:31:13 · 277 阅读 · 0 评论 -
iOS底层学习 - 深入RunLoop
RunLoop这个名词对于iOS开发来说应该是一个听腻了的词汇,而且只知其一不知其二,本篇章就来再深入复习一下RunLoopRunLoop简介什么是RunLoop一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,这种模型通常被称作 Event Loop。 Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消息循环,再比如 OSX/iOS 里的 RunLoop 。实转载 2020-12-08 17:47:00 · 369 阅读 · 0 评论 -
IOS端骨架屏加载动画的研究以及TABAnimation三方库的研究
1、骨架屏简介:骨架屏 Skeleton Screen Loading 也叫加载占位图,是近年流行的加载控件,通常表现形式是在界面上待加载区域填充灰色的占位图,与线框图的效果非常相似。Skeleton Screen就是在页面数据尚未加载前先给用户展示出页面的大致结构,直到请求数据返回后再渲染页面,补充进需要显示的数据内容。相比于之前的Loading动画,骨架屏页面更容易让用户产生一种错觉,页面快加载完了。优点:预加载界面大致结构,提高用户体验。缺点:对于一些复杂的UI适配难度比较大。.原创 2020-12-08 15:26:45 · 1973 阅读 · 0 评论 -
crash分析记录
目录由一个问题说起:1、通过设备直接获取崩溃日志2、使用Xcode从设备获取崩溃日志3、dSYM符号集4、利用dSYM解析符号集由一个问题说起:在开发阶段,在使用ucardebug的过程中突然闪退,因为这个时候我的手机是没有处于调试中的,所以xcode不会把奔溃堆栈打出来,但这个奔溃确实是出现了,怎么处理?经过研究,发现此时获取到奔溃信息的途径有这么2种:1、通过设备直接获取崩溃日志1)打开设置->隐私->分析->分析数据,在其中找到你想要的应.原创 2020-12-07 18:21:02 · 1040 阅读 · 0 评论 -
IOS实现重签名实操
重签是把已发布/未发布的包重新签名为自己的证书和签名,关键就是替换ipa内的证书和描述文件。手动签名可以研读这篇文章----IOS重签名原理主要通过codesign命令完成。值得说明的是:我们要想对ipa进行重签名,那么这个ipa包一定是未被加密过的,如何查看是否被加密过?使用如下命令:因为重签名是替换原有的签名(不了解的可以研读这篇文章:https://blog.csdn.net/lwb102063/article/details/110661830),所以我么这里需要准备如下文件,来替换原来原创 2020-12-06 19:58:02 · 646 阅读 · 0 评论 -
获取ipa安装包的最新方式
获取IPA包的之前我们可以借助PP助手来获取越狱或者非越狱后的IPA安装包,但现在PP助手已经凉凉了,不过我们还是有其他的方式可以获取到IPA包的---《Apple Configurator 2》;这款应用我们可以直接在Apple Store上进行下载,https://apps.apple.com/cn/app/apple-configurator-2/id1037126344?mt=12,下面说一下如何获取官方的IPA包:以下步骤为转载内容:原文地址1.首先下载一个《Apple Configu原创 2020-12-06 16:06:10 · 28539 阅读 · 6 评论 -
彻底搞懂IOS签名机制
目录一、加密/解密1、对称加密:2、非对称加密:3、秘钥配送问题解答4、中间人攻击二、数字签名1、单向散列函数2、数字签名三、数字证书一、加密/解密 常见的加密解密算法分为“对称加密”和“非对称加密”两种。1、对称加密: 通信双方共享同一个秘钥,发收信双方要想进行加密通信,都使用这个密钥对数据进行加密和解密。常见的基于“对称密钥”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5...原创 2020-12-04 17:41:31 · 329 阅读 · 0 评论 -
Category的本质
iOS底层原理总结 - Category的本质面试题Category的实现原理,以及Category为什么只能加方法不能加属性。 Category中有load方法吗?load方法是什么时候调用的?load 方法能继承吗? load、initialize的区别,以及它们在category重写的时候的调用的次序。Category的本质首先我们写一段简单的代码,之后的分析都基于这段代码。Presen类 // Presen.h#import <Foundation/Found.转载 2020-12-04 09:09:59 · 292 阅读 · 0 评论 -
探寻Block本质(二)
block对对象变量的捕获block一般使用过程中都是对对象变量的捕获,那么对象变量的捕获同基本数据类型变量相同吗?查看一下代码思考:当在block中访问的为对象类型时,对象什么时候会销毁?typedef void (^Block)(void);int main(int argc, const char * argv[]) { @autoreleasepool { Block block; { Person *pers...转载 2020-12-02 18:32:49 · 118 阅读 · 0 评论 -
探寻block的本质(一)
面试题block的原理是怎样的?本质是什么? __block的作用是什么?有什么使用注意点? block的属性修饰词为什么是copy?使用block有哪些使用注意? block在修改NSMutableArray,需不需要添加__block?首先对block有一个基本的认识block本质上也是一个oc对象,他内部也有一个isa指针。block是封装了函数调用以及函数调用环境的OC对象。探寻block的本质首先写一个简单的blockint main(int argc, const.转载 2020-12-02 17:18:14 · 362 阅读 · 0 评论 -
IOS逆向需用到的工具汇总
1、Mac 上自带的一些命令工具file:查看Mach-O的文件类型file 文件路径otool:查看Mach-O特定部分和段的内容otool -L Mach-O文件 # 查看当前 Mach-O 文件的动态链接库。lipo:常用于多架构Mach-O文件的处理查看架构信息:lipo -info 文件路径 导出某种特定架构:lipo 文件路径 -thin 架构类型 -output 输出文件路径 合并多种架构:lipo 文件路径1 文件路径2 -output 输出文件路径2、原创 2020-12-01 09:53:10 · 1571 阅读 · 0 评论 -
machOView编译源码运行报错解决方案
转载地址:https://www.jianshu.com/p/13133cc0a8fastring can't find1、缺少c++文件 地址 按照说明操作2、target --> build Phases --> Link Binary 添加libc++.tbd3、target --> build setting 按图示设置截屏2020-10-28 17.34.49.pngmacOS no findtarget --> build setting.转载 2020-11-25 17:16:57 · 365 阅读 · 0 评论 -
探寻Class的本质
iOS底层原理总结 - 探寻Class的本质对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题的分析探索问题的本质内容。Class的本质我们知道不管是类对象还是元类对象,类型都是Class,class和mete-class的底层都是objc_class结构体的指针,内存中就是结构体,本章来探寻Class的本质。Class objectClass = [NSObject class]; Class objectMetaClass = object_getClass(原创 2020-11-12 22:58:16 · 143 阅读 · 0 评论 -
探寻OC对象的本质
iOS底层原理总结第一天 - 探寻OC对象的本质对小码哥底层班视频学习的总结与记录。面试题部分,通过对面试题的分析探索问题的本质内容。面试题:一个NSObject对象占用多少内存?探寻OC对象的本质,我们平时编写的Objective-C代码,底层实现其实都是C\C++代码。OC代码的转化过程OC的对象结构都是通过基础C\C++的结构体实现的。我们通过创建OC文件及对象,并将OC文件转化为C++文件来探寻OC对象的本质OC如下代码#import <Fo..原创 2020-10-09 08:32:08 · 233 阅读 · 0 评论