内存管理
内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,
,并且在适当的时候释放和回收内存资源。
(一)为什么要进行内存管理。 由于移动设备的内存极其有限 ,需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。管理范围: 任何继承NSObject的对象。 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露。 引用计数器 每个oc对象都有自己的引用计数器,他是一个整数(int) ,字面理解是对象被引用次数,可以理解为多少个人在使用 dealloc 当对象被摧毁时,系统自动给对象发送个dealloc消息,因此通过dealloc的调用与否判断对象是否被销毁 (二)引用计数器的作用 判断对象要不要回收的唯一依据就是计数器是否为 0 ,若不为 0 则存在。(三)内存管理原则 1,只要有人使用这个对象,这个对象就不会被回收。 2. 只要你想使用这个对象,那么就应该让这个对象引用计数加1. 3. 当你不想使用这个对象时,应该让这个对象引用计数减一。 谁创建,谁retain 谁release。 (单个对象内存管理) 开启僵尸对象检测 为了防止僵尸对象,将对象设置为nil.(避免使用野指针) 但对象内存管理 内存泄漏 1 retain 和release 不匹配问题 2 对象在使用中被赋值nil 3在方法 中不当的使用retain -(void)setName(对象类型)name if(_name==name) return; [_name release]; _name = [name retain]; if(_name!=name) [_name release]; _name = [name retain]; nil ,null Nil的区别 nil A null pointer to an object-c object.(#define nil ((id)0)); NULL A null pointer to anything else.(#define NULL((void *)0)); NULL是一个通用指针,泛型指针。 NSNull A class defines a singleton object used to represent null values in collection objects (which don't allow nil values). [NSNull null]: The singleton instance of NSNull. [NSNull null]是一个对象,他用在不能使用nil的场合。 因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值。如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类。NSNull只有一个方法: + (NSNull *) null; u@property 原子性 atomic nonatomic 读写属性 控制判断是否生成set方法 readwrite readonly set方法处理 assgin retain copy @class 做一个简单引入(可以用import替代) 循环引入问题 与import区别 作用:import会包含引用类的所有信息(内存),包括引用类的变量和方法 @class仅仅是告诉编译器有这么一个类,具体这个类是什么信息,完全不知 效率 import的文件 一旦最开始的头文件稍有改动 后面引用到这个文件的所有类都需要重新编译一遍,编译效率非常低,相比来说,class就没有这个问题 自动释放池 autorelease 返回对象本身 何时释放 1 手动释放 2 runloop结束后自动释放 (线程) retainCount==0时释放 简单的总结 这里比较重要 但是最近比较晕 以后继续总结 |
内存管理总结
最新推荐文章于 2024-11-15 21:21:06 发布