代码改变世界

iOS开发系列-weak与unsafe_unretained修饰符

2018-05-14 16:17  iCoderHong  阅读(426)  评论(0编辑  收藏  举报

概述

在iOS内存管理中,为防止循环引用,定义类的内部对象属性使用weak、unsafe_unretained修饰符,不产生强引用。

开发中一般使用的weak修饰符,那么接下来说下weak跟unsafe_unretained的本质区别。这里涉及顺便了解到一些iOS内存管理的本质。

weak与unsafe_unretained区别

weak修饰的对象指针,当指向的对象在内存中销毁后,该指针自动赋值为nil。也就是说指针变量保存的地址值为0x0。
对于Objective-C的特性 给nil发送消息不会报错。

unsafe_unretained修饰的对象指针,当指向的对象在内存中销毁后,此时的对象称之为僵尸对象。该指针依然指向该对象,即指针变量依然保存着销毁对象的内存地址。
对于Objective-C的特性,给僵尸对象发送消息会造成野指针错误。