美文网首页
08-03、MRC(手动内存管理)与ARC(自动内存管理)

08-03、MRC(手动内存管理)与ARC(自动内存管理)

作者: 山中石头 | 来源:发表于2017-09-25 10:16 被阅读0次
ARC: Automatic(自动) Reference(引用) Counting(计数)

什么是自动引用计数?
不需要程序员管理内容, 编译器会在适当的地方自动给我们添加release/retain等代码
注意点: OC中的ARC和java中的垃圾回收机制不太一样, java中的垃圾回收是系统干得, 而OC中的ARC是编译器在编译的时候加上release和retain方法

MRC: Manul(手动) Reference(引用) Counting(计数)

什么是手动引用计数?
所有对象的内容都需要我们手动管理, 需要程序员自己编写release/retain等代码

内存管理的原则就是有加就有减

也就是说, 一次alloc对应一次release, 一次retain对应一次relese

一个项目可以从MRC切换到ARC下,如图:
Snip20170925_43.png
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {

@autoreleasepool {
    // 只要创建一个对象默认引用计数器的值就是1
    Person *p = [[Person alloc] init];
    
    NSLog(@"retainCount = %lu", [p retainCount]); // 1
    
    // 只要给对象发送一个retain消息, 对象的引用计数器就会+1
    [p retain];
    
    NSLog(@"retainCount = %lu", [p retainCount]); // 2
    
    // 通过指针变量p,给p指向的对象发送一条release消息
    // 只要对象接收到release消息, 引用计数器就会-1
    // 只要一个对象的引用计数器为0, 系统就会释放对象
    [p release];
    // 需要注意的是: release并不代表销毁\回收对象, 仅仅是计数器-1
    NSLog(@"retainCount = %lu", [p retainCount]); // 1
    
    [p release]; // 0
    NSLog(@"--------");
}
//    [p setAge:20];

return 0;
}

相关文章

  • 11-AutoreleasePool实现原理上

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

  • OC中内存管理

    在OC中内存管理MRC手动内存管理和ARC自动内存管理,ARC是从iOS 4.0开始,在iOS 4.0之前...

  • 《Effective Objective-C 2.0》读书笔记(

    第五章 内存管理 第29条:理解引用计数 OC 中有手动内存管理(MRC) 自动内存管理(ARC)手动内存管理需要...

  • OC - OC的内存管理机制

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

  • iOS的内功:内存管理机制

    1.Objective-C的内存管理机制 OC的内存管理机制有三种,分别是ARC(自动内存管理),MRC(手动内存...

  • 内存管理机制

    内存管理机制 Objective-C的内存管理主要有三种方式手动内存计数(MRC)、ARC(自动内存计数)、内存池...

  • 内存管理-MRC和ARC&引用计数管理

    MRC和ARC MRC 通过手动引用计数来进行对象的内存管理 ARC 通过自动引用计数来管理内存,之前我认为编译器...

  • iOS 内存管理底层探究

    内存管理方式: MRC:手动管理内存,需要开发人员管理内存,手动调用Release,以控制对象内存的释放。ARC:...

  • iOS面试技巧(2020年07月)

    问题和答案 什么是ARC?(ARC是为了解决什么问题而诞生的) ARC为自动内存管理,与之对应的是MRC(手动内存...

  • 2020年春季iOS面试总结

    原文地址 1、内存管理 iOS中的内管理主要是通过引用计数来管理内存的。分为自动管理(ARC)和手动管理(MRC)...

网友评论

      本文标题:08-03、MRC(手动内存管理)与ARC(自动内存管理)

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