二、内存相关

2021-07-13  本文已影响0人  Miss_DQ

注:本文集为自己准备面试时,系统复习的笔记,如大家有兴趣,欢迎阅读并指正
1.autoreleaspool有什么用,什么时候创建,什么时候释放?
2.__strong、__weak、assign的修饰符的底层实现,引用计数器的位置?
3.什么是消息转发和消息查找?如何捕捉崩溃?
4.分类为什么没有属性?分类和扩展区别,为什么分类不可以添加属性,扩展可以?

1、内存布局
2、内存管理方案
ps:散列表本质就是一张哈希表,实现快速分流,什么是哈希表?

ptr->f(ptr) ->index

3、数据结构

Spinlock_t

RefcountMap:引用技术表,哈希表。适用哈希为了提高查找效率
weak_table_t:弱引用表。key:对象指针、value:weak修饰的指针

4、MRC和ARC

MRC:手动引用计数。
ARC:是LLVM和Runtime协作的结果。禁止手动调用retain/release/retainCount/dealloc

5、引用计数管理

dealloc释放过程:
dealloc方法实现如下图


image.png

判断是否是pointer_isa,weak表,关联对象,c++,slidtable表是否释放

object_dispose()方法实现如下图


image.png
6、弱引用原理
7.自动释放池
  1. AutoreleasePool的实现原理是怎样的?
  2. AutoreleasePool为何可以嵌套使用?
@autoreleasepool{}
// => 等价于
void *ctx = objc_autoreleasePoolPush();
{}
objc_autoreleasePoolPop(ctx);

什么是自动释放池?

8、循环引用?

是否在开发过程中碰到循环引用问题,你是怎么解决的?
Block循环引用

NSTimer循环引用

上一篇下一篇

猜你喜欢

热点阅读