1、ASMemery.h
#import <Foundation/Foundation.h>
@interface ASMemery : NSObject
{
@public
unsigned int age;
NSString *name;
}
-(void)dealloc;
@end
2、ASMemery.m
#import "ASMemery.h"
@implementation ASMemery
-(id)init
{
if(self = [super init])
{
name = @"yxk";
age = 24;
}
return self;
}
-(void) dealloc
{
NSLog(@"%@ is released",name);
[super dealloc];
}
@end
3、main.m
#import <Foundation/Foundation.h>
#import "ASMemery.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
ASMemery* aM = [[ASMemery alloc] init];
NSLog(@"%lu",(unsigned long)aM.retainCount);
aM.retain;
NSLog(@"%lu",(unsigned long)aM.retainCount);
aM.release;
NSLog(@"%lu",(unsigned long)aM.retainCount);
aM.release;
NSLog(@"%lu",(unsigned long)aM.retainCount);
}
return 0;
}
//OC内存管理
//1、引用计数
//2、ARC
//3、垃圾回收
//OC内存管理模型,是基于对象的“所有权”
//在OC中如果一个实体拥有一个对象,那么这个实体对这个对象有所有权
//所有权意味着该实体确保对其拥有的对象进行清理
//任何一个对象都可以有一个或者多个的所有者,当一个对象有至少1所有者的时候,该对象存在
//否则,系统自动释放内存
//所有权管理规则:
//当使用alloc,new,copy,mutableCopy等方放创建对象,拥有对象的所有权
//retain实现对一个对象的所有
//release实现对一个对象的放弃所有权
//引用计数
//所有权策略通过引用计数来实现,通常称之为“retain count”,每个对象都有retainCount
//当创建alloc、new、copy、mutableCopy一个对象时,她的引用计数为1
//发送retain消息给一个对象,她的引用计数加1
//发送release消息给一个对象,它的引用计数减1
//引用计数为0,向系统发送一条消息,dealloc对象
//1、autorelease:自动释放池,延迟释放
//2、new,alloc与release和dealloc
//内存管理方法
//1、-(id) retain:对象引用计数加1,返回对象本身
//2、-(void) release:对象引用计数减去1
//3、-(unsigned) retainCount:不改变引用计数,返回当前对象的引用计数的值
//4、-(void) dealloc:这个方法在对象引用计数为0的情况下,当内存回收的时候,由系统自动调用
//自动释放池
//自动释放池保存对象的引用,而非本身
//自动释放池释放时,会向池子里每一个对象发送一条release消息,而不是释放对象
//Xcode会为程序的主线程自动生成释放池。
//当程序运行处autoreleasepool后,发送autorelease消息
//注意,autorelease只负责release1次,如果release一次后,对象的引用计数仍然大于1,也不会被释放
打印结果
2014-12-19 16:32:11.548 test1[3007:112204] 1
2014-12-19 16:32:11.549 test1[3007:112204] 2
2014-12-19 16:32:11.549 test1[3007:112204] 1
2014-12-19 16:32:11.550 test1[3007:112204] yxk is released