ios内存管理
来源:互联网 发布:炉石盒子大数据 编辑:程序博客网 时间:2024/06/11 03:24
引用计数:每个对象有一个与之相关的整数,称作“引用计数器”或者“保留计数器”,当某段代码需要访问一个对象时,该段代码会将对象的保留计数器+1,表示需要访问这个对象;当结束对该对象的访问时,保留计数器-1,表示它不在访问该对象;当保留计数器为0时,对象被销毁,所占内存被系统收回。
当使用new、retain或copy创建一个对象的时候,该对象的保留计数器+1;要增加对象的保留计数器值,可以发送retain消息;要减少对象保留计数器的值,发送release或autorelease消息;当对象的保留计数器值为0时,Objective-C会自动向对象发送一条dealloc消息。
autorelease(自动释放)和release功能类似,向一个对象发送release消息时,会立刻执行,使对象的保留计数器-1;发送autorelease时,表示将会在某个合适的阶段将对象保留计数器-1.
#import <Foundation/Foundation.h>@interface Test : NSObject@end@implementation Test-(id)init{ if(self = [super init]) { NSLog(@"对象数量:%ld",[self retainCount]); } return self;}-(void)dealloc{ NSLog(@"对象被清空"); [super dealloc];}@endint main(){ Test *t = [[Test alloc]init];//1 [t retain]; NSLog(@"对象数量:%ld",[t retainCount]);//2 [t retain]; NSLog(@"对象数量:%ld",[t retainCount]);//3 [t release]; NSLog(@"对象数量:%ld",[t retainCount]);//2 [t release]; NSLog(@"对象数量:%ld",[t retainCount]);//1 [t release];//0 -- 计数器为0时,会自动像父类发送dealloc消息销毁对象,dealloc消息需在子类重写,不可直接调用父类中的方法 return 0;}
对象所有权:如果一个对象具有指向其他对象的实例变量,则该对象拥有这些变量;同样,如果一个函数创建了某个对象,则该函数拥有它创建的这个对象。
1、任何自己创建的对象都归自己所有(new、retain或copy创建一个对象)
2、可以使用retain
来获得一个对象的所有权(一个对象的所有者可能不止一个,拥有一个对象的所有权就表示我们需要保持该对象存在)
3、当您不再使用您所拥有的对象时,您必须释放对这些对象的所有权(向对象发送release或者autorelease消息)
4、您不能释放非您所有的对象的所有权
.......待续
- IOS 内存管理
- iOS内存 管理 一点
- ios内存管理
- IOS内存管理小结
- iOS内存管理
- 再论iOS内存管理
- iOS内存管理
- IOS 内存管理
- IOS内存管理
- IOS内存管理
- iOS内存管理
- ios 内存管理基础知识
- ios内存管理
- iOS 内存管理
- IOS内存管理详解
- iOS 内存管理总结
- ios内存管理
- ios 内存管理
- Java学习札记12:Java中的StringBuilder类功能详解
- Jetty与Maven集成
- Linq学习(join)
- invokeRequired属性和 invoke()方法
- hdu 3016 Man Down(线段树)
- ios内存管理
- Poj 1659 Frogs' Neighborhood
- js取得当前页面url
- ubuntu11.10中配置OGRE1.8
- Linux入门:运行级别解析
- DORADO5 dataTree 的问题
- arraycopy() appi
- adb shell 命令详解
- 类图及类图中的关系