内存管理02

  在oc中内存管理方法十分的严谨,OC确实强大!在Xcode中能够自动管理内存的功能,叫做ARC。但是还是要知道怎么手动管理内存。

在使用对象时,系统会对该对象(object)的引用计数器进行加1操作(retain),然而只有当对象的引用计数器等于0时系统才会回收该对象,所以为了防止内存泄露必须在不使用该对象(object)时,对它进行release操作。

使用对象原则:

1.谁创建对象,谁对对象release。

2.谁retain了,谁release。

3.有alloca,就要有release。

4.只要调用了alloc,必须有release与它相对应;如果对象不是通过alloca创建,不需要对该对象release。

内存管理的代码规范:

1。set方法的代码规范:

基本数据类型的set方法,直接赋值

OC对象类型得这样写:

//假如类是Person

- (void)setPerson:Person *person

{

  if(person!=_person)//判断新旧对象是否相同

  {

    [_person release];//对旧对象进行减1操作,如果第一次使用时确实不相同,此操作会忽略,因为oc能够容忍空指针错误

    

    _person = [person retain]; //对新对象进行加1操作    

}

}

dealloc的代码规范

- (void)dealloc

{  

  [_person release];//当不需要使用这个对象时,减1操作与set里的ratain相对应

  [super dealloc];//一定要写在代码的最后面

}

时间: 2024-10-24 01:39:43

内存管理02的相关文章

OC中的内存管理02

四.自动释放池 (autorelease) 1)基本原理: 1> 自动释放池是OC里面一种内存管理的自动回收机制,一般可以将临时变量添加到自动释放池中,统一回收释放. 2> 当自动释放池销毁的时候,在自动释放池中所有的对象都会调用一次release方法. 3> OC对象只要发送一条autorelease消息,会把对象方法放在最近的释放池中(栈顶的释放池). 4> autorelease实际上是延迟了release方法的调用,每一次autorelease就会把对象放在当前的autor

OC 内存管理-02 ARC 内存管理

ARC 管理 概念: ARC简单,不用程序员在去管理内存 1.强指针 Strong[] :只要有强指针指向一个对象,那么系统就不会回收该对象 2.弱指针 weak :只要没有强指针指向对象,系统立即回收该对象 3.默认情况下,所有的指针都是强指针类型 4.创建出来就会立即被释放掉,应为没有强指针指向该对象

OC 内存管理-02 autorelease 概念 以及用法

(1) @autoreleasepool { }//自动释放池代表,池子将要被销毁,对池子中所有的对象进行一次release操作 (2) 不管你这个对象时在@autoreleasepool 之内创建的还是在之外创建的,只要你在池子中调用了autorelease那么这个对象就会被放入到池子中 (3) 只有在自动释放池的作用域中调用对象的autorelease方法才能够正确的讲对象放入到池子中 (4) 如果在自动释放池中一个对象被多次释放[autorelease],那么会报野指针错误 -------

Tensoflw.js - 02 - 模型与内存管理(易懂)

Tensoflw.js - 02 - 模型与内存管理(易懂) 参考 W3Cschool 文档:https://www.w3cschool.cn/tensorflowjs/ 本文主要翻译一些英文注释,添加通俗的注释,记录新手使用遇到的小问题,去除不必要的部分,帮助新手快速入门 上一篇介绍了,Tensorflow.js 的安装,张量与变量的表示方法.创建和输出 Tensoflw.js - 01 - 安装与入门(中文注释) 本篇介绍模型与内存管理 Tensorflow.js 模型: 1.在 Tenso

iOS技术面试02:内存管理

怎么保证多人开发进行内存泄露的检查. 如何定位内存泄露? 1> 使用Analyze进行代码的静态分析(检测有无潜在的内存泄露) 2> 通过leak检查在程序运行过程中有无内存泄露 3> 为避免不必要的麻烦, 多人开发时尽量使用ARC 2.非自动内存管理情况下怎么做单例模式. 创建单例设计模式的基本步骤 · >声明一个单件对象的静态实例,并初始化为nil. >创建一个类的类工厂方法,当且仅当这个类的实例为nil时生成一个该类的实例 >实现NScopying协议, 覆盖al

OC -内存管理

管理内存有三种方式 1:垃圾回收,在java中常见的管理内存方法,系统自动检测对象是否被使用,是否被释放 2.MRC: 手动管理引用计数,iOS管理内存的方式,程序员通过手动方式来管理对象是否被释放 3.ARC: 自动管理引用计数:基于MRC,系统自动的管理内存 引用计数:retainCount 当我们使用一个指针指向一块内存的时候,应该对这块内存做retain操作,引用计数+1.当我们不再使用这个指针指向这块内存,应该对这块内存做release操作,引用计数-1.这样可以使引用计数值一直保持等

(转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃 C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能

Unit03 - 对象内存管理 、 继承的意义(上)

Unit03 - 对象内存管理 . 继承的意义(上) 1.内存管理:由JVM来管理的  1)堆:    1.1)存储所有new出来的对象(包含成员变量)    1.2)没有任何引用所指向的对象就是垃圾,        垃圾回收器(GC)不定时清理垃圾,        回收过程是透明的(看不到的),        调用System.gc()建议GC尽快来回收    1.3)成员变量的生命周期:          创建对象时存在堆中,对象被回收时一并被回收    1.4)内存泄露:不再使用的对象没有

C++内存管理(超长,例子很详细,排版很好)

[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能.本期专题将从内存管理.内存泄漏.内存回收这三个方面来探讨C++内存管理问题