李峰峰博客

RunLoop 实现原理

底层 runloop
1、RunLoop 的概念我们都知道,APP 运行过程中有一个很重要的线程,就是主线程。但是,一般线程执行完任务后就会退出,而 APP 需要持续运行,所以就需要一个机制使主线程持续运行并随时处理用户事件,在 iOS 里,程序的持续运行就是通过 RunLoop 实现的。 RunLoop 的作用 ...
阅读全文

Runtime 拾遗

底层 runtime
1、self 和 supersuper 是每个开发者都很熟悉的东西,我们经常在重写父类方法的时候,经常通过 super 去调用一下父类的实现,例如: 123456- (instancetype)init { if (self = [super init]) { ...
阅读全文

Runtime 之消息机制

底层 runtime
1、objc_msgSend 简介在 OC 中,所有的方法调用底层都会转换成 objc_msgSend 函数进行调用,例如,对于下面方法调用: 12[myObject test1];[myObject test2:100]; 将其转换成 C++ 源码: 12((void (*)(id, SE ...
阅读全文

Runtime 之 method

底层 runtime
1、method 与 Class先看下 Class 的结构:class_rw_t 里面的 methods、properties、protocols 是二维数组,是可读可写的,包含了类的初始内容、分类的内容:也就是说,这里的 methods 既包含分类中的方法,也包含了类的初始方法。实际上,我 ...
阅读全文

Block 实现原理

底层 block
1、block 的底层结构假设对于以下 block: 12345int a = 10;void (^myblock)(void) = ^{ NSLog(@"myblock is %d",a); // 注意,block 内部访问了外部变量};myb ...
阅读全文

OC 对象一探究竟之三:alloc 与 init

底层 对象
一般我们都是通过如下方式创建一个对象: 1MyObject *objc = [[MyObject alloc] init]; 那么,alloc 和 init 方法都分别做了什么事呢? 1、allocalloc 方法实现如下: 123+ (id)alloc { return _ ...
阅读全文

OC 对象一探究竟之二:内存中的对象

底层 对象
1、NSObject 对象的内存占用首先,我们知道,在 32 位系统中,指针占用 4 个字节;在 64 位系统中,指针占用 8 个字节。这里,我们只考虑 64 位情况。 对于 NSObject 对象, 其实现如下: 12345struct NSObject_IMPL { Cl ...
阅读全文

OC 对象一探究竟之一:对象的底层实现

底层 isa 对象
一、NSObject 对象1、NSObject 的底层实现我们在 iOS 开发过程中,所编写的 Objective-C 代码,其底层实现都是使用的 C\C++ 代码,所以 Objective-C 的面向对象都是基于 C\C++ 的数据结构实现的。 例如,对于以下代码(main.m): 123 ...
阅读全文

AFNetworking 实现分析

源码
一、概述AFNetworking 是 iOS 中常用的网络请求库,其使用也比较简单,以 POST 请求为例: 1234567891011121314151617181920212223242526// 创建 AFHTTPSessionManager 实例AFHTTPSessionManage ...
阅读全文

MLeaksFinder 实现分析

源码
一、概述MLeaksFinder 是腾讯 WeRead 团队开源的 iOS 内存泄露检测工具。MLeaksFinder 的使用非常简单,使用 pod 添加了 MLeaksFinder 依赖之后,如果页面出现了内存泄露,APP 进行弹窗提示: 接下来,通过 MLeaksFinder 源码,看下 ...
阅读全文
上一页 下一页