Objective-C基础3:内存管理续

1.上篇我们讲了OC中的内存管理基础,我们再总结一下何时该用内存管理。
1)当用new、alloc、copy创建对象时,必须要释放对象。

2)当拥有对象时,如果是临时对象,不需要释放;当需要长时间保留对象时,必须保留对象并且在dealloc方法中释放对象。

2.OC中的垃圾回收机制

OC2.0引入了垃圾回收机制,也就是启用了垃圾回收机制之后,我们忘记了释放对象,OC会帮我们释放对象,这点可看出OC比C++的强大之处了。

垃圾回收机制主要原理是在运行中定时动态跟踪对象,检查对象的引用技术并且进行清理,垃圾回收只支持mac,ios不支持,原因是在运行过程中动态释放,对于手机app不适用,所以apple引入ARC来解决问题。需要注意的是:我现在用的XCode6设置里面已经没有垃圾回收机制设置了。

3.IOS中ARC机制

ARC(automatic reference counting)机制跟垃圾回收机制差不多,都会帮助你管理对象的生命周期。不同的是垃圾回收机制是在运行时决定释放对象的,ARC是在编译的时候编译器给我们的代码偷偷地加上retain、release方法。我们可以选中工程,通过菜单Edit->Refactor->Convert to Objective-C ARC来对工程进行ARC转换。ARC只对ROP对象起作用。具体讲解可以参考OC基础教程活着apple官网文档https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html。

时间: 2024-11-08 17:29:48

Objective-C基础3:内存管理续的相关文章

Objective -C Memory Management 内存管理 第一部分

Objective -C Memory Management??内存管理??第一部分 Memory management is part of a more general problem in programming called resource management. 内存管理是资源管理的一部分. Every computer system has finite resources for your program to use. These include memory, open fi

java基础---JVM内存管理以及内存运行机制学习总结

自己从网上搜资料拼接了一张JVM内存图:如下图所示: 我们思考几个问题: 1.jVM是怎么运行的? 2.JVM运行时内存是怎么分配的? 3.我们写的java代码(类,对象,方法,常量,变量等等)最终存放在哪个区? VM运行时数据区域: 1.程序计数器(program Counter Register):   是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的 方式去实 现),字节码解释器工作时就是通过改

.NET基础拾遗(1)类型语法基础和内存管理基础2

二.内存管理和垃圾回收 2.1 .NET中栈和堆的差异? 每一个.NET应用程序最终都会运行在一个OS进程中,假设这个OS的传统的32位系统,那么每个.NET应用程序都可以拥有一个4GB的虚拟内存..NET会在这个4GB的虚拟内存块中开辟三块内存作为 堆栈.托管堆 以及 非托管堆. (1).NET中的堆栈 堆栈用来存储值类型的对象和引用类型对象的引用(地址),其分配的是一块连续的地址,在.NET应用程序中,堆栈上的地址从高位向低位分配内存,.NET只需要保存一个指针指向下一个未分配内存的内存地址

【IOS学习基础】内存管理

1.内存几大区域 1> 栈区:局部变量(基本数据类型.指针变量). 2> 堆区:程序运行的过程中动态分配的存储空间(创建的对象). 3> BSS段:没有初始化的全局变量和静态变量. 4> 数据区:已经初始化的全局变量和静态变量.(字符串常量) 5> 代码段:程序编译后的代码的内容. 2.引用计数器 1> 引用计数器:每个继承自NSObject的对象都有一个引用计数器,用来表示当前对象有几个拥有者. 2> 引用计数器的作用:用来判断对象是否应该回收. 3> 引

.NET基础拾遗(1)类型语法基础和内存管理基础

一.基础类型和语法 1.1 .NET中所有类型的基类是什么? 在.NET中所有的内建类型都继承自System.Object类型.在C#中,不需要显示地定义类型继承自System.Object,编译器将自动地自动地为类型添加上这个继承申明,以下两行代码的作用完全一致: public class A { } public class A : System.Object { } 1.2 值类型和引用类型的区别? 在.NET中的类型分为值类型和引用类型,它们各有特点,其共同点是都继承自System.Ob

Objective-C基础2:内存管理基础

1.内存存储区域 C.C++里面.栈区:存储临时变量和对象.堆区域:存储动态分配对象.静态变量存储区:存储静态变量和常量对象. OC里面的内存存储区域跟C.C++一样. 2.为什么要进行内存管理 写过C.C++程序的都知道,内存管理永远是C++程序的一大痛点,项目当中崩溃全部来自于内存相关的操作,尤其是指针操作和内存操作,稍不注意就会产生内存访问违规造成程序崩溃.那么如何进行内存管理呢,个人认为有以下几点原则:尽量用系统提供给我们的封装对象,不要用原生的,比如用string而不要用char*,用

OC基础笔记——内存管理(广州黑马一期)

栈: 局部变量:定义在方法或函数内部变量 系统管理 堆:动态存储区 一般由程序猿管理 ##引用计数 如果内存管理不当 1.不再使用对象没有被回收,内存泄露,最终导致程序闪退 2.正在被使用对象被释放了,野指针,访问野指针就会导致程序崩溃 ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 1.当一个对象刚刚出生时候,它的引用计数 1 2.当对象上引用计数是0的时候,系统立即把它回收 3.rele

Objective-C(内存管理)

引用计数器 每个OC对象都有一个占4个字节存储空间的引用计数器 当使用或创建一个对象时,新对象的引用计数器默认是1 retain:可以使引用计数器+1 release:可以是引用计数器-1 retainCount:获得当前的引用计数器的值 当对象被销毁时,会重写dealloc方法 -(void)dealloc { // 这句必须放在最后面 [super dealloc]; } 僵尸对象:所占内存已经被回收的对象,僵尸对象不能再使用 野指针:指向僵尸对象(不可用的内存)的指针 错误:EXC_BAD

8.0OC基础语法-内存管理

什么是内存管理移动设备的内存极其有限,每个app所能占用的内存是有限制的当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量等管理范围:任何继承了NSObject的对象,对其他基本数据类型(int.char.float.double.struct.enum等)无效 对象的基本结构每个OC对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有多少人正在使用这个OC对象每个OC对象内部专门有4个字节的存储空间来存储引用