OC学习iOS Developer程序员

MRC模式下的内存管理机制

2016-11-09  本文已影响31人  Calvin_Shen

OC的内存管理机制是什么?
答:内存管理的机制:

每个对象都有自己的引用计数器

在MRC内存管理模式下,引用计数器计算机是无法自动操作的。

当向对象发送alloc、copy、new消息的时候,该对象引用计数器会自动设置为1。

向对象发送[对象   retainCount]获得该对象引用计数器的值。

当不在使用对象的时候,会发送release消息,通知引用计数器”减“1.

当一个对象的引用计数器的值为0时,”系统“会自动销毁该对象,并回收该内存空间。

当对象销毁的时候,会自动发送dealloc消息。

声明式属性中是如何解决内存问题的?

答:

默认情况下声明式属性,并没有解决内存问题

如果需要解决内存问题,需要加上(retain)

-(void)setBook:(Book*)book

{

      if(nil ==_book)

     {

            _book =book;

            [_book retain];

      }else{

           [_book release];

           _book = book;

           [_book retain];

      }

}

-(void) dealloc{

          [_book  release];

          [super  dealloc];

}

@property (retain) Book* book;

声明式属性解决的只有setter问题,加1操作问题

dealloc中减1操作依然需要自己做

如果一个对象中的声明式属性是对象类型,加上retain

当一个对象销毁的时候,应该将它拥有的属性对象全部release(重写dealloc方法)

getter方法和工厂方法中的内存问题是如何解决的?

答:自动释放池可以帮我们自动释放对象

+(id)EFstudent{

    EFStudent* stu = [Student alloc] init] autorelease];

     return stu;

}

-(EFStudent*)student{

      return   [[_student  retain] autorelease];

内存的管理,是对堆内存的管理(申请和释放)通过引用计数器来管理,当引用计数器为0时,系统释放那片内存。MRC模式下,内存的管理要遵循谁申请,谁释放的原则,即谁把引用计数器加1,谁负责减1,内存管理不当的后果有,程序崩溃(使用释放的对象)和内存泄露。

上一篇 下一篇

猜你喜欢

热点阅读