OC学习笔记(6)内存管理

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值