0
点赞
收藏
分享

微信扫一扫

【IOS之内存管理】autorelease和release


autorelease不是garbage collection,完全不同于Java或者.Net中的GC。


autorelease和作用域没有任何关系!


autorelease原理:


1.先建立一个autorelease pool


2.对象从这个autorelease pool里面生成。


3.对象生成之后调用autorelease函数,这个函数的作用仅仅是在autorelease pool中做个标记,让pool记得将来release一下这个对象。


被标为autorelease的对象,并不是等程序结束时才release,如:在viewDidLoad中创建一个autorelease对象,在viewDidLoad走完,一次消息循环完毕,这个autorelease pool中的对象就会被release,button的点击事件,点击代码执行完会release一下autolease类型的变量)


上面这个例子应该这样写:


ClassName *myName = 【[[ClassName alloc] init] autorelease];//标记为autorelease


[classA setName:myName]; //retain count == 2  (

如果myName的属性是retain的话 )


[myName release]; //retain count==1,注意,在ClassA的dealloc中不能release name,否则release pool时会release这个retain count为0的对象,这是不对的。



记住一点:如果这个对象是你alloc或者new出来的,你就需要调用release。如果使用autorelease,那么仅在发生过retain的时候release一次(让retain count始终为1)。

举报

相关推荐

0 条评论