美文网首页
内存管理MRC

内存管理MRC

作者: 越天高 | 来源:发表于2020-11-10 10:46 被阅读0次

在iOS中,使用引用计数来管理OC对象的内存
一个新创建的OC对象引用计数默认是1,当引用计数减为0,OC对象就会销毁,释放其占用的内存空间
调用retain会让OC对象的引用计数+1,调用release会让OC对象的引用计数-1

  • 内存管理的经验总结
    当调用alloc、new、copy、mutableCopy方法返回了一个对象,
    可以通过以下私有函数来查看自动释放池的情况
        extern void _objc_autoreleasePoolPrint(void);

autorelease我们在创建完对象之后调用一次autorelease。这样就不用关心他什么时候会被销毁,他会自动根据情况销毁

02

在iOS中对象与对象之间都是有联系的
想拥有某个对象,就让它的引用计数+1;不想再拥有某个对象,就让它的引用计数-1


- (void)setDog:(Dog *)dog
{
    [dog retain];
    _dog = dog;
}
- (Dog *)dog
{
    return _dog;
}

- (void)dealloc
{
    [_dog release];
    _dog = nil;
    [super dealloc];
    NSLog(@"%@dealloc",self );
}

Person *p = [[[Person alloc] init] autorelease];
        NSLog(@"%ld", [p retainCount]);//p1
       // NSLog(@"%ld", [p retainCount]);
        Dog *dog = [Dog new];//dog1
        [p setDog:dog];//dog2
        [dog release]; //dog1
        [[p dog] run];
        [p release];//dog0,p0

03set方法的内存管理

要保持计数器的平衡,有+1就要有-1,
set方法的内存管理,在我们使用person的时候,有可能出现重新设置dog的情况,这时候可能会造成有一个dog对象无法被释放,先设置的那个,
当我们设置新的dog的时候,应该把上一个dog对象给release掉,
假如设置的新的dog还是原来的dog对象,可能会出现访问僵尸对象的错误,所以还要加一次判断是否为空

- (void)setDog:(Dog *)dog
{
    if (_dog != nil)
    {
        [_dog release];
        [dog retain];
        _dog = dog;
    }
    
}

04@property

@property就帮助我们生成set和get方法根据修饰词不同,生成不同的代码,对象类型就是用return,基本数据类型就是用assign

5

foundation框架中的很多的对象,使用类方法创建出来的对象,都在内部调用了autorelease方法了比如,array dictionary

+ (instancetype)person
{
    return [[[Person alloc] init] autorelease];
}

相关文章

  • iOS MRC 内存管理的基本原则

    iOS MRC 内存管理的基本原则iOS MRC 内存管理的基本原则

  • iOS面试题-第一页

    1.简述OC中内存管理机制. 答:内存管理机制:使用引用计数管理,分为ARC和MRC,MRC需要程序员自己管理内存...

  • iOS面试 | 基础知识 | <1>

    1.简述OC中内存管理机制 答:内存管理机制:使用引用计数管理,分为ARC和MRC,MRC需要程序员自己管理内存,...

  • iOS内存管理总结(ARC/MRC)

    MRC原理 MRC: 手动管理内存(retain, release, autorelease,不多说) 持有对象,...

  • 最新版本iOS内存管理

    IOS 内存管理 1.MRC(人工引用计数),手动管理内存。 MRC模式下,所有的对象都需要手动的添加retain...

  • OC - OC的内存管理机制

    导读 一、为什么要进行内存管理 二、内存管理机制 三、内存管理原则 四、MRC手动内存管理 五、ARC自动内存管理...

  • MRC、ARC内存管理机制

    MRC、ARC内存管理机制?(为什么要进行内存管理, 内存管理的范围和对象, 内存管理的原理) ** (为什么)...

  • iOS面试常问的知识点

    内存管理方面(ARC、MRC、autorelease、autoreleasepool,简单粗暴的说一说内存管理) ...

  • 11-AutoreleasePool实现原理上

    我们都知道iOS的内存管理分为手动内存管理(MRC)和自动内存管理(ARC),但是不管是手动内存管理还是自动内存管...

  • ARC与MRC

    1. Objective-c语言中的MRC(MannulReference Counting) 在MRC的内存管理...

网友评论

      本文标题:内存管理MRC

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