
iOS底层学习
文章平均质量分 96
AsiaSun.
日拱一卒
展开
-
iOS性能优化
开局几道面试题:你在项目中是怎么优化内存的?优化你是从哪几方面入手?列表卡顿的原因有哪些?你平时是怎么优化的?遇到tableView卡顿吗?会造成卡顿的原因大致有哪些?CPU和GPU在屏幕成像过程中,CPU和GPU起着至关重要的作用CPU(central processing unit,中央处理器)对象的创建、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)GPU(Graphics Processing Unit,图形处理器)纹原创 2020-06-29 11:13:07 · 539 阅读 · 1 评论 -
iOS设计模式与架构
讲讲MVC、MVVM、MVP几种设计模式,以及你在项目里面具体是怎么写的你自己用过哪些设计模式一般开始做一个项目,你的架构是如何思考的架构架构(architecture)软件开发中的设计方案架构可大可小,类与类之间的关系、模块与模块之间的关系、客户端与服务端的关系都可归结为架构没有哪一个架构是最好的,只有最适合自己的常见的架构名词MVC、MVP、MVVM、VIPER、CDD还有三层架构、四层架构MVCMVC分两个版本,一种是苹果版本的,一种是常用版本的,具体有什么相同与不同呢.原创 2020-06-29 16:02:54 · 647 阅读 · 1 评论 -
iOS中对象的本质
我们都知道Object-C是在C\C++的基础上演化而来的,即Object-C底层还是C\C++,然后再经过汇编转换成机器语言,最后被计算机CPU所识别。那么,我们平时写的类、对象会转换成C\C++什么数据结构类型呢?首先,我们新建一个项目,并在项目中简单写上#import <Foundation/Foundation.h>int main(int argc, const c...原创 2019-04-01 11:29:28 · 1154 阅读 · 1 评论 -
内存管理(三)
引用计数的存储在64位中,引用计数可以直接存储在优化过的isa指针中,也可能存储在SideTable类中。isa指针中存储的什么东西,具体可以参考Runtime的本质(一)在isa里面,有一个extra_rc参数其中:rc就是retainCount引用计数的意思。引用计数器太大,extra_rc中存储不下,则has_sidetable_rc=1,引用计数器会存储在一个名为SideTable的类的属性中。struct SideTable { spinlock_t slock;原创 2020-06-26 14:19:57 · 418 阅读 · 1 评论 -
内存管理(二)
iOS程序的内存布局简而言之,就是一张图:原创 2020-06-25 11:10:14 · 439 阅读 · 1 评论 -
内存管理(一)
开局几道面试题:使用CADisplayLink、NSTimer有什么注意点介绍下内存的几大区域讲一下你对iOS内存管理的理解ARC帮我们做了什么?weak指针的实现原理autorelease对象在什么时机会被调用release方法里面有局部变量,出了方法后会立即释放吗?小伙伴,你能答出几道?有哪些是不太了解的?通过下面的学习,你讲掌握以上面试题。CADisplayLink、NSTimer使用注意CADisplayLink、NSTimer会对Target产生强引用,如果target又原创 2020-06-23 15:42:51 · 263 阅读 · 0 评论 -
多线程学习(二)
多线程的安全隐患资源共享一块资源可能被多个线程共享,也就是多个线程可能会访问同一块资源比如多个线程访问同一个对象、同一个变量、同一个文件当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题两个经典的例子存钱取钱卖票#import "ViewController.h"@interface ViewController ()@property (assign, nonatomic) int ticketsCount;@property (assign, nonatomic)原创 2020-06-19 16:01:36 · 497 阅读 · 1 评论 -
多线程学习(一)
开局几道面试题:你理解的多线程?iOS的多线程方案有哪几种?你更倾向于哪一种?你在项目中用过GCD吗?GCD的队列类型说一下operationQueue和GCD的区别,以及各自的优势线程安全的处理手段有哪些?OC你了解的锁有哪些?自旋锁和互斥锁对比使用以上锁需要注意哪些?用C/OC/C++,任选其一,实现自选或互斥iOS中常见多线程方案...原创 2020-06-12 11:26:43 · 355 阅读 · 1 评论 -
RunLoop学习
开篇几道面试题:讲讲RunLoop,在项目中有用到吗?runloop内部实现逻辑runloop和线程的关系timer与runloop的关系程序中添加每3秒响应一次的NSTimer,当拖动tableview时timer可能无法响应,为什么?怎样可以解决?runloop是怎样响应用户操作的,具体流程是什么样?说说runloop的几种状态runloop的model作用是什么?RunLoop,顾名思义,就是运行循环,就是在程序运行过程中循环做一些事情。RunLoop的应用范围:定时器(Tim原创 2020-06-04 14:18:39 · 426 阅读 · 0 评论 -
Runtime的本质(六)---常用的API
Runtime的一些常用APIRuntime API01 – 类动态创建一个类(参数:父类,类名,额外的内存空间)Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes)注册一个类(要在类注册之前添加成员变量)void objc_registerClassPair(Class cls) 销毁一个类void objc_disposeClassPair(Class cls)获取is原创 2020-05-30 12:04:16 · 410 阅读 · 0 评论 -
Runtime的本质(五)
面试题:答案my name is <ViewController: 0x15f2026e0>首先,我们看下YZPerson *person = [[YZPerson alloc] init];[person print];两句代码在内存方面的存储状态:person指针 指向 YZPerson建立的实例对象。我们知道,[[YZPerson alloc] init]建立的实例对象,是一个结构体。结构体里面至少有一个指针,isa。还有一个成员变量_name。而且,isa是结构体原创 2020-05-28 10:05:24 · 328 阅读 · 0 评论 -
Runtime的本质(四)---[super class]、isKindOfClass、isMemberOfClass
来一道面试题:@interface YZPerson : NSObject@end@interface YZStudent : YZPerson@end@implementation YZStudent- (instancetype)init{ if (self = [super init]) { NSLog(@"[self class] = %@", [self class]); NSLog(@"[self superclass] = %@", [原创 2020-05-26 16:54:33 · 392 阅读 · 0 评论 -
Runtime的本质(三)----objc_msgSend
OC中的方法调用,其实都是转换为objc_msgSend函数的调用objc_msgSend的执行流程可以分为三大阶段:消息发送动态方法解析消息转发1.消息发送当空对象调用方法的时候,是怎么操作的?当调用方法的时候,执行的是objc_msgSend函数objc_msgSend(<#id _Nullable self#>, <#SEL _Nonnull op, ...#>)。第一个参数是消息接收者,第二个参数是方法名。我们在源码中找到objc_msgSend的具体实原创 2020-05-25 15:17:50 · 562 阅读 · 1 评论 -
Runtime的本质(二)---objc_class结构
这篇文章,我们主要来介绍一下objc_class结构的内容与含义。我们知道Class的类型是objc_class类型typedef struct objc_class *Class;点进去objc_class可以看到部分定义:objc_class继承objc_objectobjc_object的部分定义:简化可归结objc_class的结构为:可以看出,Class里面有isa、superclass指针,方法列表、属性列表、协议列表以及成员变量列表以及其他信息。其中,方法列表包含了自己的方法列表原创 2020-05-21 11:00:39 · 534 阅读 · 1 评论 -
Runtime的本质(一)---isa再学习
OC是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同OC的动态性是由Runtime API来支撑Runtime API提供的接口基本都是C语言的,源码由C\C++\汇编语言编写原创 2020-05-19 17:41:32 · 466 阅读 · 0 评论 -
iOS之Block本质(三)
首先,我们看两段代码:从运行结果可以看出,如果是普通局部变量age,第17行和第22行的age地址是一样的,第20行的地址跟前面两个是不同的。这个原因我们在上节已经分析过。是因为,第17和第22行的age是age的地址,第20行的age是捕获进去的age,其实是一个在block内部新建的同名age,因此,地址不同。转化为底层代码可以看到:从底层代码可以看出,三者最后都是取的&(ag...原创 2020-04-29 16:36:07 · 303 阅读 · 0 评论 -
iOS之Block本质(二)
问:在24行打断点,person对象是否被释放?按说,person的作用域是其附近的两个{},过了两个{}后,person对象应该被释放,而实际上,在24行断点处,person对象并没有消失。这是为什么呢?首先我们将程序运行,可以看到其运行过程:24行打印block学习[2478:134123] ---------25行打印block学习[2478:134123] 调用了block—1...原创 2020-04-01 19:27:29 · 401 阅读 · 1 评论 -
iOS之Block本质(一)
在iOS之Block基本使用中,我们介绍了一些有关Block的基本知识,以及基本用法,在这里,我们将继续围绕Block来讲解,学习有关Block的本质问题。首先,在学习之前,增加一些动力。经常在面试中,会被问及到这些问题:block的本质是什么?__block的作用是什么?原理是什么?有哪些使用注意点?我们知道block在使用的时候,一般用copy修饰,用copy修饰发生了什么?具体过程是...原创 2020-03-30 18:12:07 · 423 阅读 · 0 评论 -
iOSKVC的实现原理
KVC:全称Key-Value Coding,也称为键值编码。KVC可以通过一个key间接访问某个对象属性。KVC有两个特性:可以访问私有成员变量;可以修改私有或者系统的成员属性;KVC有以下四种方法:- (void)setValue:(nullable id)value forKey:(NSString *)key;- (void)setValue:(nullable id)va...原创 2020-02-28 16:13:56 · 959 阅读 · 1 评论 -
iOS分类Category的本质
首先,这里有几个与Category相关的面试题,大家可以看一下1、Category如何使用?2、Category的原理是什么?3、Category与类扩展的区别?4、Category中load方法是什么时候调用的?load方法能被继承吗?5、load和initialize的区别是什么?他们在category中的调用顺序是怎样的?出现继承的时候他们之间的调用过程是什么?6、Categor...原创 2020-02-26 18:21:59 · 705 阅读 · 2 评论 -
iOS中KVO的本质
提起KVO,相信很多同学都用过。我们可以用KVO监听对象属性值的改变,当属性值发生改变的时候,我们会在监听方法中得到被监听值的改变情况。我们简单看一下KVO的使用:#import "ViewController.h"#import "Persion.h"@interface ViewController ()@property (strong, nonatomic) Persion *...原创 2019-07-01 13:52:13 · 591 阅读 · 1 评论 -
消除iPhone手机上的提示小红点数字
每次打开手机,都会有各种通知提示,抑或是微信消息通知,对于强迫症患者真的是。。。当然,你可以把每一个手机里面app通知都关掉,不过,有点费劲,今天,我们用技术把所有的小红点一次性消除,以后再也不会出现小红点了。我们知道,在iOS系统中,手机显示的界面其实是SpringBoard,因此,我们想要隐藏通知小红点,就要在SpringBoard上找到小红点。那么,如何找到SpringBoard呢?...原创 2019-03-28 11:57:57 · 2653 阅读 · 0 评论 -
iOS脱壳方法
上传到App Store上面的app,是经过一系列加密、压缩等操作的,这个操作我们称之为加壳。加壳后的app在手机运行的时候,先进行解密、解压等操作,这个操作我们称之为脱壳。加壳/脱壳操作是为了app的安全性,但我们要对原有app进行操作,必然要进行脱壳那么,如何判断app是否加壳呢?一般来说,从App Store上面下载的app都是被加壳过的;当然,我们也可以通过具体命令行方法来验证app...原创 2019-04-10 15:05:31 · 4035 阅读 · 0 评论 -
利用reveal分析别人的程序
reveal真是一个利器,谁用谁知道。。。如果想用reveal看别人的程序,需要两个操作,分别在Mac电脑上以及月月手机上。首先,需要在Mac电脑上下载reveal软件:Reveal4破解版的下载 — 提取密码:b31u安装完毕后,先不管。然后再下载越狱手机上的 [ReveaLoader.deb] (https://pan.baidu.com/share/init?surl=1vOtsHe...原创 2019-03-22 20:09:20 · 552 阅读 · 0 评论 -
Cycript学习
Cycript是OC、JS、Java等语法的混合物,利用Cycript可以用来研究、修改、调试正在运行的iOS或者Mac程序Cycript的官方网址使用方法:在Cydia里面安装Cycript常用命令:cycript 进入cycriptcycript -p 进程名称 或 进程ID 调试指定进程Ctrl + C 取消输入Ctrl + D 退出Co...原创 2019-03-22 13:17:32 · 1230 阅读 · 1 评论