iOS 内存管理(一)之基础知识介绍

时间:2023-03-09 20:04:56
iOS 内存管理(一)之基础知识介绍

1,什么是引用计数

所有OC对象都有一个计数器,叫做引用计数,引用计数就是目前有几个对象在使用该对象(持有该对象的引用);

2,什么是对象所有权

A对象拥有B对象的引用,A对象拥有B对象的所有权;

3,什么情况下需要retain

A对象的拥有者又增加了一个,那么A对象的拥有计数加1,此时需要使用retain(就是当其他对象需要该对象时,即其他的指针指向了该对象,那么就使该对象的引用计数加1此时需要向该对象发retain消息)

4,什么情况下需要release

A对象的拥有者又减少了一个,那么A对象的拥有计数减1,此时需要使用release(就是当该对象的拥有者不再需要该对象时,那么就可向该对象发送 release消息,使该对象的引用计数减1)

5,野指针会有什么问题,如何避免野指针和僵尸对象

野指针就是指 指向一个所占内存已经被销毁的对象的指针;野指针会使程序崩溃,而且不容易检测;

僵尸对象则是指一个所占用的内存已经被销毁的对象; -- 释放掉一个内存后,如果这个指针还需要,要么赋新值,要么给个nil;

6,自动释放池是什么

自动释放池是OC的一种内存自动管理机制,当自动释放池销毁时,会将池中的对象逐个调用release方法;

使用autorelease方法将对象放入包含它的自动释放池中;自动释放池实质是当自动释放池销毁后调用对象的release方法,不一定就能销毁对象(例如如果一个对象的引用计数器>1则此时就无法销毁,只是使该对象的引用计数-1)

7,什么是强指针,什么是弱指针

强指针,拥有对象所有权,引用计数+1

弱指针,可以引用对象,不会拥有对象所有权, 引用计数不变

8,assign,strong,weak有什么区别

strong:(ARC环境下对象属性的默认值)强指针,拥有对象所有权,相当于retain,引用计数+1。只要用了ARC机制,OC对象类型都推荐使用strong,不使用retain

weak:(ARC下)弱指针,可以引用对象,相当于assign赋值,不会拥有对象所有权, 引用计数不变。weak适用于OC对象 ① 弱指针会在其指向的实例对象被释放后⾃自动变成nil  ② 即当弱指针指向的实例对象被释放了,弱指针也不会变成野指针

assign:适用于非指针类型 (适用于基本数据类型)

9,如何解决两个对象之间的循环引用

使用弱引用;将两个对象中的一个设为弱引用