OC 属性的内存管理

作者: tanyufeng | 来源:发表于2016-08-15 08:32 被阅读165次
来自星星的星球

属性的内存管理经常是让人很头疼的一件事,尤其是很多人在面试时经常会被问到,下面我们来讲讲属性的内存管理。

MRC:

在MRC下,属性的修饰词有三个,分别是assign,retaincopy三者对应不同的内存管理方式。

assign

assign:修饰基本数据类型,例如int,float等;他不会对基本数据类型进行内存管理;
参考setter和getter方法:

-(void)setAge:(NSInteger)age
{
    _age = age;
}

-(NSInteger)age
{
    return _age;
}

retain

retain:修饰对象类型,对属性进行内存管理; 该属性对象指向一个对象后,对应对象的引用计数+1。
参考setter和getter方法:


-(void)setSex:(NSString *)sex
{
    if (_sex != sex) {
        //释放旧对象
        [_sex release];
        
        //持有新对象
        _sex = [sex retain];
    }
}

-(NSString *)sex
{
    return [[_sex retain] autorelease]; //持有再自动释放
}


copy

copy:修饰对象类型, 对属性进行内存管理. 该属性对象指向一个对象后, 对应对象的引用计数不会改变。属性对象会复制对应对象的内容并生成一个新的对象,然后属性对象指向这个新的对象。
参考setter和getter方法

-(void)setHobby:(NSString *)hobby
{
    if (_hobby != hobby) {
        //释放原有对象
        [_hobby release];
        
        //复制新对象
        _hobby = [hobby copy];
    }
}

-(NSString *)hobby
{
    return [[_hobby retain] autorelease];
}

注意:利用copy修饰的属性被赋值后引用计数为1, 属性和对应对象指向的不是同一块内存空间;

ARC:

在ARC下,属性的修饰词有三个,分别是strong,weakcopy三者对应不同的内存管理方式。

  • strong:相当于MRC下的retian, 一般叫做强引用;
  • weak:修饰对象,但不对属性进行内存管理, 属性的引用计数不会改变,用于避免循环引用等问题;注意不能修饰基本数据类型;
  • copy:同MRC下的copy一样

*欢迎大家踊跃评论,让我们一起探讨技术!!
如果觉得文章不错,请帮忙点击文章下方的喜欢!!
你的支持将是对我最好的鼓励, 谢谢!!!

相关文章

  • OC 属性的内存管理

    属性的内存管理经常是让人很头疼的一件事,尤其是很多人在面试时经常会被问到,下面我们来讲讲属性的内存管理。 MRC:...

  • OC中属性修饰符对容器的影响

    OC中用于内存管理的属性修饰符有:copy、strong、weak、assign、unsafe_unretaine...

  • 内存管理

    一.内存基本介绍 1、OC内存管理的基本概念 2、OC内存管理的范围​管理范围:管理任何继承自NSObject的对...

  • 内存管理

    目录一、内存分区 1、RAM和ROM 2、内存的五大分区二、内存管理 1、OC内存管理是指什么?OC内存管理的本质...

  • OC的内存管理

    1、OC的内存管理 OC是通过引用计数进行内存管理的,其核心思想遵循“谁创建谁释放;谁引用谁管理”。 OC的内存管...

  • Swift 内存管理与循环引用问题(weak、unowned)

    之前我在CSDN上写过一篇博客:OC内存管理、ARC、property属性、__strong、__weak、__b...

  • Lesson 0-1 Objective-C basic

    6.OC 手动内存管理 OC 内存管理原则: 只要使用 alloc, new, copy, mutableCopy...

  • self.property 和 _property

    一、self.property访问 self.property 经过oc消息派发,可以完成属性所定义的“内存管理语...

  • .点语法和_下划线

    点语法 点语法是对属性的访问,经过oc消息派发,可以完成属性所定义的“内存管理语义”, 包含set和get...

  • 第一面:ios原生面试

    1.KVC与KVO区别; 2.根据属性说下oc内存管理机制,比如assign,retain,什么情况下容易导致内存...

网友评论

    本文标题:OC 属性的内存管理

    本文链接:https://www.haomeiwen.com/subject/bmhusttx.html