【IOS之内存管理】autorelease和release
2013-12-13 17:36
525 查看
autorelease不是garbage collection,完全不同于Java或者.Net中的GC。
autorelease和作用域没有任何关系!
autorelease原理:
1.先建立一个autorelease pool
2.对象从这个autorelease pool里面生成。
3.对象生成之后调用autorelease函数,这个函数的作用仅仅是在autorelease pool中做个标记,让pool记得将来release一下这个对象。
4.当pool要把池中的对象release的时候,pool本身也需要rerlease, 此时pool会把每一个标记为autorelease的对象release一次。如果某个对象此时retain count大于1,这个对象还是没有被销毁。(被标为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)。
autorelease和作用域没有任何关系!
autorelease原理:
1.先建立一个autorelease pool
2.对象从这个autorelease pool里面生成。
3.对象生成之后调用autorelease函数,这个函数的作用仅仅是在autorelease pool中做个标记,让pool记得将来release一下这个对象。
4.当pool要把池中的对象release的时候,pool本身也需要rerlease, 此时pool会把每一个标记为autorelease的对象release一次。如果某个对象此时retain count大于1,这个对象还是没有被销毁。(被标为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)。
相关文章推荐
- iOS 非ARC内存管理 autorelease方法和@autoreleasepool
- IOS 学习之 —— 内存管理alloc,assign,retain,copy,release,autorelease
- 黑马程序员——IOS基础——OC内存管理循环retain和autorelease
- iOS内存管理之NSAutoreleasePool
- Cocos2d-x 内存管理中retain() 、autoRelease()、release()
- iOS 非ARC基本内存管理系列 4-autorelease方法和@autoreleasepool
- IOS开发之内存管理self.prop=nil; vs. [prop release];prop=nil;
- 黑马程序员--IOS_学习笔记_内存管理_@autorelease
- 对iOS中内存处理的一些理解(retain,copy,assain,release,autorelease)
- ios内存管理1-retain和release的简单使用
- 内存管理: alloc, retain, release, autorelease, copy, assign
- cocos2d-x的内存管理机制release(),retain(),autorelease()
- Cocos2d-x 内存管理中retain() 、autoRelease()、release()
- iOS内存管理——alloc/release/dealloc方法的GNUstep实现与Apple的实现
- ios内存管理1-retain和release的简单使用
- ios学习--Objective C内存管理进阶(二):理解autorelease
- 黑马程序员--ios基础--oc内存管理--@property参数、循环引用、autorelease
- iOS内存管理——autorelease方法解析
- iOS学习————Objective C内存管理之理解autorelease
- iOS内存管理之注册到autoreleasePool的方法