2020年7月27日
底层
runloop
1、RunLoop 的概念我们都知道,APP 运行过程中有一个很重要的线程,就是主线程。但是,一般线程执行完任务后就会退出,而 APP 需要持续运行,所以就需要一个机制使主线程持续运行并随时处理用户事件,在 iOS 里,程序的持续运行就是通过 RunLoop 实现的。
RunLoop 的作用 ...
阅读全文
2020年5月12日
底层
runtime
1、self 和 supersuper 是每个开发者都很熟悉的东西,我们经常在重写父类方法的时候,经常通过 super 去调用一下父类的实现,例如:
123456- (instancetype)init { if (self = [super init]) { ...
阅读全文
2020年5月10日
底层
runtime
1、objc_msgSend 简介在 OC 中,所有的方法调用底层都会转换成 objc_msgSend 函数进行调用,例如,对于下面方法调用:
12[myObject test1];[myObject test2:100];
将其转换成 C++ 源码:
12((void (*)(id, SE ...
阅读全文
2020年4月26日
底层
runtime
1、method 与 Class先看下 Class 的结构:class_rw_t 里面的 methods、properties、protocols 是二维数组,是可读可写的,包含了类的初始内容、分类的内容:也就是说,这里的 methods 既包含分类中的方法,也包含了类的初始方法。实际上,我 ...
阅读全文
2020年4月10日
底层
block
1、block 的底层结构假设对于以下 block:
12345int a = 10;void (^myblock)(void) = ^{ NSLog(@"myblock is %d",a); // 注意,block 内部访问了外部变量};myb ...
阅读全文
2020年3月29日
底层
对象
一般我们都是通过如下方式创建一个对象:
1MyObject *objc = [[MyObject alloc] init];
那么,alloc 和 init 方法都分别做了什么事呢?
1、allocalloc 方法实现如下:
123+ (id)alloc { return _ ...
阅读全文
2020年3月28日
底层
对象
1、NSObject 对象的内存占用首先,我们知道,在 32 位系统中,指针占用 4 个字节;在 64 位系统中,指针占用 8 个字节。这里,我们只考虑 64 位情况。
对于 NSObject 对象, 其实现如下:
12345struct NSObject_IMPL { Cl ...
阅读全文
2019年11月21日
底层
isa
对象
一、NSObject 对象1、NSObject 的底层实现我们在 iOS 开发过程中,所编写的 Objective-C 代码,其底层实现都是使用的 C\C++ 代码,所以 Objective-C 的面向对象都是基于 C\C++ 的数据结构实现的。
例如,对于以下代码(main.m):
123 ...
阅读全文
2019年10月11日
源码
一、概述AFNetworking 是 iOS 中常用的网络请求库,其使用也比较简单,以 POST 请求为例:
1234567891011121314151617181920212223242526// 创建 AFHTTPSessionManager 实例AFHTTPSessionManage ...
阅读全文
2019年10月6日
源码
一、概述MLeaksFinder 是腾讯 WeRead 团队开源的 iOS 内存泄露检测工具。MLeaksFinder 的使用非常简单,使用 pod 添加了 MLeaksFinder 依赖之后,如果页面出现了内存泄露,APP 进行弹窗提示:
接下来,通过 MLeaksFinder 源码,看下 ...
阅读全文