第九讲.内存管理初级.(内存管理的方式,引用计数机制及影响计数的各个方法,dealloc方法,内存管理的基本原则,掌握copy的实现)

一.内存管理的方式.

1.进行内存管理的原因:

1>.由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。

管理范围:任何继承NSObject的对象,对其他的基本数据类型无效。

2>.本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露。

2. 内存常见问题体现在两个方面:内存溢出,野指针异常.

内存溢出:ios给每个应用程序提供了一定的内存,用于程序的运行.一旦超出内存上限,程序就会Crash.(iphone3GS内存30M左右,iphone 5S 内存80M左右.程序中占内存最大的就是图片和音频等资源文件)

野指针问题:对象内存空间已经被系统回收,仍然使用指针操作这块内存.野指针异常是程序Crash的主要原因.代码量越大的程序,越不容易找出野指针的位置.

3.内存管理的方式

垃圾回收(Garbage Collector垃圾收集器 简称gc):程序员只需要开辟内存空间,不需要用代码显示的释放,系统来判断哪些空间不再被使用,并回收这些内存空间,以便再次分配.整个过程不需要代码,系统自动回收.java开发中一直使用的就是垃圾回收技术.

MRC(人工引用计数 Manual Reference Count):内存的开辟和释放都由程序代码进行控制.相对垃圾回收来说,对内存的控制更加灵活,可以在需要释放的时候及时释放对程序员的要求较高,程序员要熟悉内存管理的机制.

ARC(自动引用计数 Auto Reference Count):ios5.0的编译器特征,它允许用户开辟空间,不用释放空间.它不是垃圾回收!它的本质还是MRC,只是编译器帮助程序员默认加了释放的代码.

二.引用计数机制,影响计数的各个方法.

三.dealloc方法

四.内存管理的原则.

五.掌握copy的实现

时间: 2024-10-21 22:09:33

第九讲.内存管理初级.(内存管理的方式,引用计数机制及影响计数的各个方法,dealloc方法,内存管理的基本原则,掌握copy的实现)的相关文章

OC --(9)-- 内存管理初级:内存管理的方式、引用计数机制,影响计数的各个方法、dealloc方法、内存管理的基本原则、掌握copy的实现

iOS应?程序出现Crash(闪退),90%以上的原因是内存问题. 在一个拥有数十个甚?至是上百个类的?程里,查找内存问题极其困难. 了解内存常?问题,能帮我们减少出错几率. 内存问题体现在两个方面:内存溢出.野指针异常. 1.野指针异常 内存管理的方式 引用计数 影响引用计数的方法有 +alloc -retain -copy -release -autorelease

内存管理初级基础

内存管理方式 垃圾回收机制(gc)(java在特定时间段进行回收); MRC(Manual Reference Count)(手动管理)苹果中没有垃圾回收机制...... ARC(Auto Reference Count)     (自动引用计数) ---->垃圾回收:程序员只需要开辟内存空间,不需要用代码显示地释放,系统类判断哪些空间不再被使用,并回收这些内存空间,以便再次分配.整个回收过程不需要写任何代码,由系统自动完成垃圾回收.java开发中一直使用到就是垃圾回技术. 引用计数机制,影响计

setter 和 getter 高级 以及内存管理初级

setter 和 getter 的演变,紧接setter 和 getter 初级 [email protected] 和  @synthesize 这两个关键字的出现,就是为了剔除代码中的setter方法和getter方法 @property:可以自动生成某个成员变量的setter和getter声明 @property int age;//相当于下面这两句:- (void)setAge:(int)age;- (int)age; @synthesize自动生成age的setter和getter实现

Obj-C内存管理初级

内存管理初级 为什么要管理内存 我们的iOS APP 出现Crash(闪退),90%以上的原因是内存问题.我们使用Xcode编译运行程序时常见到的一个EXC_BAD_ACCESS问题就是个典型的内存错误--访问了一块僵尸内存,当然这里不对僵尸内存进行深入讨论.那么内存问题主要体现在哪些方面呢,那就是“内存溢出”和“野指针异常”. 内存溢出 iOS给每个应?程序提供了?定的内存,?于程序的运?.iPhone 3GS内存30M左右,iPhone 5S 内存80M左右.?旦超出内存上限,程序就会Cra

oc 内存管理初级

?.内存管理的?式 1.内存常见问题 (1)野指针异常:指针操作已经销毁的对象 指针指向某对象,该对象释放后,该指针即为野指针,对其操作造成野指针异常. 原因:过度释放. (2)内存溢出:超出内存上限 iOS给每个应?程序提供了?定的内存,?于程序的运?.iPhone 3GS内存 30M左右,iPhone 5S 内存80M左右.?旦超出内存上限,程序就会Crash. 2.内存管理的方式 (1)垃圾回收(gc)   |   OC支持 -  OS X开发 支持   |   iOS 不支持 程序员只需

内存管理初级基础--代码

person类   ----->.h文件 #import <Foundation/Foundation.h> @interface Person : NSObject<NSCopying>  //使用copy必须引入NSCopying协议... //                     语义设置 //1.NSString接收了copy协议, //2.大多数规范化 @property (nonatomic , copy)NSString *name; @property (

iOS内存管理机制解析之MRC手动引用计数机制

前言: iOS的内存管理机制ARC和MRC是程序员参加面试基本必问的问题,也是考察一个iOS基本功是 否扎实的关键,这样深入理解内存管理机制的重要性就不言而喻了. iOS内存管理机制发展史 iOS 5以前 :MRC(手动引用计数) iOS 5及以后:ARC (自动引入计数) MRC机制时代 "谁开辟申请,谁及时合理释放" 面对自己申请的内存空间是要及时进行回收的: 不及时释放会造成什么结果? 对象存储在栈上,可能会大量的占用内存,内存不足造成程序闪退(也就是所说的内存泄露) 不合理释放

Linux用户和组管理,查看软件缓存,通过命令查看硬件信息(cpu,版本,序列号,内存,主板,内核等)

 通过修改/etc/inittab.通过这个文件修改系统的启动方式. ls –l /etc/ | more   (管道),将前面的结果交给后面的命令进行处理. 在linux中遇到问题使用man命令. 查找文件信息并将文件存储到一个制定的文件中. ls –la > "a.txt" 创建组名: 创建组: 查看Linux中所有组的信息:cat /etc/group | more 其中root:x:0 root:表示组名,x:表示加密后的权限声明,0:表示root组的id号. 7创建

转:内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理][转载]

内存区划分.内存分配.常量存储区.堆.栈.自由存储区.全局区[C++][内存管理][转载] 一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.- 程序结束释放4.另外还有一个专门放常量的地方.- 程序结束释放