OC 内存管理小结

来源:互联网 发布:json数据 汉字编码 编辑:程序博客网 时间:2024/06/05 21:12


       内存管理的原因

 

         系统资源有限,所以每个app所能占用的内存是有限制的


OC中提供了一个机制来实现内存管理,它被称为“引用计数

· 每一个对象都有一个引用计数(retain count) 

· 对象被创建的时候,引用计数的值是1 

· 当引用计数值是0的时候,对象将被系统统一销毁 

· 我们可以通过调用一些方法来操作引用计数的值

 

 

    管理范围:任何继承了NSObject的对象,对其他基本数据类型(int、char、float、double、struct、enum等)无效    

  每个OC对象内部专门有4个字节的存储空间来存储引用计数器

 

  3.引用计时器操作


对象的建立:

· alloc:为一个新对象分配内存,并且它的引用计数为1。调用alloc方法,你便有对新对象的所有权

· copy:制造一个对象的副本,该副本的 引用计数为1,调用者具有对副本的所有权

· retain:使对象的引用计数加1,并且获得对象的所有权

 

对象的销毁:

· release:使对象的引用计数减1,并且放弃对象的所有权

· autorelease:使对象的引用计数在未来的某个时候减1,并且在那个时候放弃对象的所有权

 


  

 

一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收

1     当一个对象被销毁时,系统会自动向对象发送一条dealloc消息

2     一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言

3    一旦重写了dealloc方法,就必须调用[super dealloc],并且放在最后面调用

4     不要直接调用dealloc方法

 

关于retaine的操作

1        给对象发送一条retain消息,可以使引用计数器值+1(retain方法返回对象本身)

2        给对象发送一条release消息,可以使引用计数器值-1

3        可以给对象发送retainCount消息获得当前的引用计数器值

对象的销毁

 1    当一个对象的引用计数器值为0时,那么它将被销毁,其占用的内存被系统回收

 2    当一个对象被销毁时,系统会自动向对象发送一条dealloc消息

 3    一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言

 4    一旦重写了dealloc方法,就必须调用[superdealloc],并且放在最后面调用

 5    不要直接调用dealloc方法

 6    一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致程序崩溃(野指针错误)

 

 

内存管理原则:

1.只要对象存在就不会销毁。

2 对自己创建的对象负责。

3 谁创建,谁release

  通过alloc、new或[mutable]copy来创建一个对象,那么你必须调用release或autorelease

   不是自己创建的不能去release.

4  谁retain,谁release

     对一个对象调用了 retain,,就必须相应的调用release

 

      autorelease

  

1   给某个对象发送一条autorelease消息时,就会将这个对象加到一个自动释放池中

2.  当自动释放池销毁时,会给池子里面的所有对象发送一条release消息

3   调用autorelease方法时并不会改变对象的计数器,并且会返回对象本身

4.   autorelease实际上只是把对release的调用延迟了,对于每一次autorelease,系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用Release


0 0
原创粉丝点击