OC的内存管理

内存管理在C中就是管理由malloc,relloc,free等函数在堆区创建的内存,OC中是管理堆空间对象的内存

MRC手动引用管理

设置手动内存管理引用计数器要在Builldsetting ->All->搜索框输入auto->objective-C    A R C的默认yes改为no即可

凡是遇到new,alloc,copy都会计数器+1.

ARC自动引用管理

GC垃圾回收机制

验证对象是否被回收掉,重写dealloc方法,用

-(void)dealloc{

NSLog(@"这个类的对象被回收掉");

//调用对象的方法

[super dealloc];

}

空指针是没有任何指向的指针,给空指针发消息不会报错

为了避免僵尸对象的问题,应该给被回收的对象赋值一个nil

MRC中不会自己增加引用计数和减少引用计数,需要程序员显视调用retainrelease

已经被销毁(回收)的僵尸对象不能用retain复活

内存管理原则:谁创建的谁销毁,谁+1谁-1

野指针:不知道指向哪里的指针

什么情况出现野指针:1内存被回收了,但指针没有指向  2.定义了指针但没初始化

内存泄漏:没有回收就是内存泄漏

什么情况会出现内存泄漏:指针被回收了,但内存没有被回收

retainrelease出现不成对,一定要成对出现,否则容易造成内存泄漏

误将对象p设置为nil(当对象p设置成nil就相当于给指针指向了空,也就是回收了p,但此时对象person new还存在,这时内存泄漏)

在函数中对p这个对象做了retain操作,造成内存泄漏

C:野指针      OC:僵尸对象

给对象(p指针这个对象)赋值为空nil;

给类对象赋值为空用Nil;

给指针赋值为空用NULL;

 

 在处理MRC多个对象内存管理时,没有直接通用的方法

set方法里先-1再+1

如果属性为了提供外部访问,那么在类的内部应该全部使用带下划线的成员变量     

如果属性实例变量有读写的特殊约定,那么在类的内部使用属性语法(self.成员变量)

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值