美文网首页
关于内存管理

关于内存管理

作者: FongG | 来源:发表于2016-11-29 23:05 被阅读0次

首先明确一点什么是自动引用计数

自动引用计数器是在ios5以后增加的一项内存管理机制,是指内存管理中对引用采取自动计数的一项技术,让编译器来进行内存管理。

在LLVM编译器中设置ARC为有效状态,就无须再次键入retain、release


</br>

内存管理的是思考方式

  1. 自己创建的对象,默认自己持有
  2. 非自己创建的对象,retain后也能够持有
  3. 自己持有的对象,在不需要的时候需要释放
  4. 不是自己持有的对象,不能释放


</br>

那么什么才叫做是“自己创建”的类呢?

使用以下名称开头的方法意味着是自己创建的对象并持有的对象:

1. alloc
2. new
3. copy
4. mutableCopy

另外根据类似“使用以下名称开头的方法名”(实现方法中是以上述方法重写),下列名称也意味着自己创建自己持有。

1. allocMyObject
2. newTheClass
3. copyThis
4. mutableCopyThat

自己创建的对象,自己持有,自己释放

/*
 * 创建时
 */

//自己生成对象并持有对象
id obj = [[NSObject alloc] init];


/*
 * 持有对象
 */

// 自己创建不需要retain就已经持有


/*
 * 释放时
 */

//自己创建的对象,需要自己去释放
[obj release];

// 释放后的 指向对象的指针依然保存在对象obj中,但一旦释放绝对不能再访问

非自己创建对象,在持有后,可以释放

/*
 * 创建时
 */

//取得非自己生产的对象,但暂时并不持有
id obj = [ NSArry arry ];


/*
 * 持有对象
 */

[obj retain];

/*
 * 释放对象
 */

//对自己持有的对象,如果不需要再使用,持有者需要去释放
[obj release];

非自己持有的对象,不能去释放


- (id)object{

   /*
    * 自己持有对象
    */
   id obj = [[NSObject alloc] init ];


    /*
     * 取得的对象存在, 但自己不持有对象
     */

//需要使用到autoRelease是因为obj需要在没有持有的状态下被释放,而现在我们设计object方法所创建的对象是不持有的,这样就说明最后retain的对象是无法主动release obj。所以需要借助autoRelease来释放obj,这样既延长了obj的生命周期,又保证在不需要的时候释放obj
    [obj autoRelease];


    return obj;
}

   NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];
   
   NSLog(@"mStr:%p,%p",  mStr,&mStr);

//mstr 打印%p输出的是 mstr指向的是@“abc”的首地址
//&mStr 输出的是mstr自己保存在内存中的地址

相关文章

  • 内存管理

    内存管理 关于内存的描述

  • Android性能优化-内存泄漏的几个案例

    JVM内存管理 Java采用GC进行内存管理。深入的JVM内存管理知识,推荐《深入理解Java虚拟机》。 关于内存...

  • 关于内存管理

    首先明确一点什么是自动引用计数 自动引用计数器是在ios5以后增加的一项内存管理机制,是指内存管理中对引用采取自动...

  • Objective-C 内存管理基础

    前言 之前的两篇拙文C语言-内存管理基础、C语言-内存管理深入 介绍了关于C语言在内存管理方面的相关知识。但是对于...

  • Swift 内存管理

    Swift 内存管理 [TOC] 前言 本文将介绍一下Swift中的内存管理,关于内存的一些基础知识可以参考我以前...

  • Controller销毁NSTimer释放的细节

    关于NSTimer释放和内存泄漏的问题。 @(NSTimer)[内存管理,NSTimer释放,循环引用] 首先需要...

  • linux内存映射

    关于页表,页表其实仅仅就是保存虚拟内存和物理内存的映射关系的,跟物理内存有没有被使用没关系的。 关于内存管理,物理...

  • Android性能优化-内存泄漏的8个Case

    1. 什么是内存泄漏? JVM内存管理 关于内存泄漏我们要知道,JVM内存分配的几种策略。 静态的 静态的存储区,...

  • 关于ARC内存管理

    ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC)。 OC是使用引用计数机制(retainCou...

  • 关于ARC内存管理

    前言:这段时间我四处投简历面试,然后发现很多以前的基础知识有点记不清了,所以趁这段时间赶紧恶补一下有关方面。 序言...

网友评论

      本文标题:关于内存管理

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