简述iOS内存管理

简述iOS内存管理

    

     iOS内存管理方式是引用计数机制(只存在堆区,只对堆区对象进行操作),通过控制对象的引用计数来实现操作对象的功能,一个对象的生命周期有生成、持有、释放、销毁。引用计数分为ARC、MRC,在MRC中,增加引用计数的方法为alloc、new、retian、copy,减少引用计数的方法为release、autorelease,当引用计数增减平衡时,系统会自动执行对象的dealloc方法,销毁对象,完成该对象的内存管理

 

    

    引用计数管理内存的理念是:通过控制内存或者对象的引用来实现生成、持有、释放、销毁对象的操作

    1、生成,对象的引用计数从0到1

    2、持有,增加一个引用,让对象的引用计数加1

    3、释放,减少一个引用,让对象的引用计数减1

    4、销毁,当对象的引用计数到0,系统就会回收这个内存空间。容易造成野指针。

  

 

1、伪拷贝

相当于没有拷贝,只是让外界对象执行了一次retain操作。

- (id)copyWithZone:(NSZone *)zone {

   return [self retain];

}

 

 

2、浅拷贝

拷贝的是地址,对象两个,共用一份内容,改变其中一个对象实例变量的值,另一个也会访问到改变之后的值,但是一定要注意,字符串如果指向常量区,那么改值相当于重指向

 (id)copyWithZone:(NSZone *)zone{

    Person *person = [[[Person allocWithZone:zone] init] autorelease];

    person.name = self.name;

   person.gender = self.gender;

    person.mArr = self.mArr;

    return person;

}

 

3 、深拷贝

对象两份,内容两份,改变其中一个的值,另一个也会发生改变

拷贝怎么实现,到底是深浅贝还是浅考贝,取决于内部代码的实现。

- (id)copyWithZone:(NSZone *)zone {

    Person *person = [[Person allocWithZone:zone]init];

    person.name = [self.name mutableCopy];

    person.gender = [self.gender mutableCopy];

    person.mArr = [self.mArr mutableCopy];

    return person;

}

posted on 2016-02-23 15:48  喵喵1007  阅读(174)  评论(0编辑  收藏  举报

导航