ios之ARC内存管理(一)

来源:互联网 发布:mac系统内存清理 编辑:程序博客网 时间:2024/05/19 10:40

引用计数(retainCount):数值表示对象有几个人在使用它;

对象被创建时alloc 引用计数加1,

当发送retain消息时,引用计数加1;

当release消息时,减1;

当对象的引用计数为0时,系统自动调用dealloc方法销毁该对象;

 

对象所有权:计数器变化

创建或复制某对象,没有创建而是保留对象使用,

copy,+1,  autorelease  ,-1 

 

-( void )dealloc{

[ super dealloc ];  //   子类的某些实例是继承父类的,需要释放父类拥有的这些对象

assign :直接赋直,默认,只是一个别名作用

retain  保留对象,两个对象指向同一个位置

copy   拷贝对象,开辟一个新内存空间,分别指向不同的内存位置

nonatomic 多线程环境下,不存在线程保护


自动释放池(Autorelease pool)是可以存放一些实体的集合,在自动释放池中的对象,是能够被自动释放的 nsobject 类提供了一个autorelease消息,当我们向一个对象发送autorelease消息时,这个对象就被放入了自动释放池,

当我们将一个对象发送了autorelease消息时,当自动释放池销毁时,会对池中的每个对象发送一个release消息,以此释放他们

(向对象发送autorelease消息,会到最后一起被release掉)


对象a retain对象b,对象b retain对象a,这时两个对象a和b都没有办法得到释放,这种情况我们称之为循环饮用

当使用new,alloc,copy,retain方法创建一个对象时,该对象的引用计数器为1。