无论是ios还是android中,系统对每个程序运行时内存的占用都有一个限制,默认都是几十M左右大小,当程序占用的内存的大小超过限制时,程序可能就会被强制退出。
拿iphone4来说,当程序内存占用超过40M时,会出现内存警告,当内存占用达到45M,还会再一次内存警告,对于以上两次警告如果不做出释放内存操作,当达到120M时,系统会自动kill掉程序。
在内存中,分为堆和栈,栈中主要存放变量,堆中主要存放对象。栈中的东西是系统自动回收的,当一个变量使用完毕后,存放在栈中的东西会立刻被回收。但堆中存储的东西是不会随便回收的。
每个OC对象里都有一个引用计数器,是一个整数,用来统计正在被引用多少次,每个引用计数器占用4个字节,对象刚刚创建时引用计数器默认为1。如果OC对象引用计数器为0时,系统就可以回收这个对象了。
引用计数器的操作:
(1) 给对象发送一条retain消息,可以使引用计数器值+1(retain方法返回对象本身)
(2) 给对象发送一条release消息,可以使引用计数器值-1
(3) 给对象发送一条retainCount消息,可以获得当前的引用计数器值