内存管理

从刚开始,就一直听到学长,还有一些学的比我快的同学再说内存管理这个问题,但是听他们讲并不能让我完全理解这个问题,所以我决定要好好学习一下内存管理


在写OC程序时会创建大量的对象,有些系统会自动释放,但当我们把它存储在堆中时,它就不能自动释放,如果不能及时释放,就会一直在那里占着我们的内存,我们就需要手动释放它们

我们正在使用的X-code中引入了ARC机制,会自动给我们的程序添加释放内存的代码,但有时候他并不能完美的解决你的问题,所以我们要学会自己手动释放内存。因为在OC中没有垃圾回收机制,所以我们必须要用到一个东西,他叫计数器。在OC中,每个对象内部都有一个与之对应的整数,叫做“引用计数器”,这个对象创建后,它的引用计数器为1,当调用了对象的alloc、return、new、copy方法后引用计数器会+1,当release后-1,当引用计数为0,那么系统会销毁这个对象。

当一个对象被回收后,我们可以用dealloc来确定他是否被回收,当他被释放后,我们必须把最后引用他的变量手动设置成nil,不然会出现指针指向一个已经被释放掉的内存的错误。

我们在释放内存时,必须遵守一个规则,那就是**谁创建,谁释放**

当一个对象被创建,被其他方法调用后需要释放的,在该方法内释放后必须重新赋值,并且retain,否则会发生你在需要调用它时会发生错误。在给一个对象赋新的值的时候,也必须先对原有的值进行release操作。

还可以用@property惊醒自动实现。

(https://img-blog.csdn.net/20151115204530406)
@property可以添加三个参数,如果我们不手动设置,则系统会选择默认值(atomic,readwrite,assign)

在OC中也存在一个自动释放内存的机制,叫做“自动释放池”,这是一个半自动的释放机制,自动释放池就是我们新创建的一个OC程序时自动出现的@autoreleasepool{},在对象初始化时如果点用了@autoreleasepool,那么这个对象会自动调用一次release方法,这样就起到了自动释放的作用。**自动释放池实质是当自动释放池销毁后调用对象的release方法,不一定就能销毁对象**

ObjC中类库中的静态方法一般都不需要手动释放,内部已经调用了autorelease方法。
                                                           唐隽
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值