iOS-内存管理小记

内存泄漏主要两种:

Release操作泄漏的内存

循环引用泄漏的内存

 

 

重写dealloc:

必须最后调用[super dealloc]

 

 

循环引用实质:多个对象相互之间有强引用,不能释放让系统回收

 

 

 

代理用weak还是assign?

Mrc用assign, arc用weak,因为变量释放后 自动指向nil,防止野指针存在

 

 

 

Nstime 循环引用属于相互循环使用解决方法:

回调方法设置invalidate设置为nil

在合适的位置invalidate设置为nil

 

 

悬垂指针:

指针指向的内存已经被释放了  但指针还存在

 

 

野指针:

没进行初始化的指针 ,指向不可用内存的指针

 

 

strong:

指向并持有该对象,修饰对象的引用计数会加1

 

weak:

指向但不持有该对象,引用计数不会加1

 

copy:

与strong类似,多修饰不可变对象

 

 

 

__unsafe_unretain:

类似weak。 当对象被释放后,指针已然保存着之前的地址,被释放后的地址 变为 僵尸对象,访问被释放的地址就会出问题,所以说他是不安全的。 

 

 

内存5大区:

栈区:函数参数、局部变量

堆区:

全局区:全局变量和静态变量

文字常量区:字符串

代码区:二机制代码

 

 

默认关键字:atomic、readwrite strong/retain

 

 

@autoreleasePool的数据结构:

双向链表

 

 

 

__weak修饰的变量 是否已被注册在@autoreleasePool :

必须。 为了延长生命周期,以延缓释放。

 

 

引用计数:

mrc(手动引用计数)和arc(自动引用计数)

 

 

怎么找到引用计数值:

Retain和release经过两次哈希算法,找到其对应的引用计数值

 

bad_access在什么情况出现:

访问销毁的内存空间。 根本原因 悬垂指针没有被释放。

 

 

__weak 和 _Unsafe_Unretain区别:

修饰的指针变量,指向的内存地址销毁后,在runtime的机制下,自动设置为nil;

而_Unsafe_Unretain不会设置nil,容易出现野指针。不安全但效率高。

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值