如果一个APP使用的内存超过20M系统会发送Memory Warning消息 ,之后会回收一些不使用的内存空间
OC内存管理范围
管理任何继承NSObject的对象,对其他的基本数据类型无效。
BSS段 数据区 代码段 程序启动时候加载
栈区 到代码区是从高地址到低地址
堆区是从低到高
对象所有权
任何对象都可能有一个或多个所有者,只要一个对象至少还拥有一个所有者,他还会继续存在
Cocoa所有权策略
任何自己创建的对象都归自己所有,可使用名字有alloc 和new 开头或名字中包含copy的方法创建对象
使用retain获得一个对象的所有权
对象的引用计数
表示对象被引用的次数,使用这个对象的个数,刚创建对象时,引用计数为1,为0时被销毁。
retainCount 8个字节存储空间存储引用计数 无符号long类型
引用计数器的作用
判断对象是否回收的依据(对象值为nil时引用计数为0但不回收)
retain消息 使引用计数+1
release消息 使引用计数 -1
retainCount消息 获得对象当前的引用计数
当对象被销毁时,系统会自动向对象发送一条dealloc消息,一般重写dealloc方法
若重写dealloc方法就必须调用[super dealloc],并且在代码块的最后调用
对象被收回那么他所占据的存储空间不再可用,坚持使用会导致程序崩溃
如果对象的引用计数不为0那么他占用的内存就不可被回收
任何对象刚创建引用计数为1。 |
|