objective-c 内存管理学习笔记

objective-c 内存管理学习笔记

本笔记记录学习objective-c的语言时对其内存管理的方式学习以及一些简单程序的测试


objective-c的内存管理原理

内存管理就是对整个程序运行过程中使用的内存进行何时分配,何时销毁的一个周期管理。
引用计数(retainCount)是Objective-C管理对象引用的唯一依据。当创建一个对象时(内存分配),对象对应的引用计数+1,通过实例对象release方法后,对应的对象引用计数-1,当对象的引用计数减到为零时,该对象的dealloc方法就会被系统自动调用,进行内存回收操作(内存销毁)。

  • 对象创建alloc,allocWithZone,new(分配内存&初始化)

    通过alloc,allocWithZone,new都可以创建对象,创建完成对象时,对象的引用计数对应的为”1”。

  • 对象持有 retain

    对象引用计数+1

  • 对象copy,mutableCopy

    复制一个对象实例,新的对象实例对象引用为”1”,和原有对象无任何上下文关系

  • 对象 release

    对象的引用计数-1,当对应引用计数为”0”时,对象对应的dealloc方法会触发调用

  • 对象的autorelease(延迟释放)
    在当前上下文的AutoreleasePool栈顶的autoreleasePool实例添加此对象,由于它的引入使Objective-C(非GC管理环境)由全手动内存管理上升到半自动化,系统会自动来管理内存。(xcode开发工具默认都是采用这种方式做,如果需要测试,需要在项目中的xcode单独配置)

简单代码测试

  • 简单测试对象创建和持有以及释放对应的引用计数的变化
Student *student = [[Student alloc] init]; //retainCount =1
NSLog(@"student retaincout:%lu",[student retainCount]);
[student retain]; //retainCount+1
NSLog(@"student retaincout:%lu",[student retainCount]);
[student release];//retainCount-1
NSLog(@"student retaincout:%lu",[student retainCount]);
[student release];//retainCount-1
student=nil;
[student release];

输出结果

2015-08-13 15:50:15.284 Fisrt[17149:3935832] student retaincout:1
2015-08-13 15:50:15.286 Fisrt[17149:3935832] student retaincout:2
2015-08-13 15:50:15.286 Fisrt[17149:3935832] student retaincout:1

注:最后为什么还要student=nil,为了确保后面再次调用release方法不出现异常情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值