OC学习笔记-内存管理、retain、release和retainCount
来源:互联网 发布:宁波淘金网络 编辑:程序博客网 时间:2024/05/19 04:53
#import <Foundation/Foundation.h>// OC通过引用计数器管理内存// 一个引用计数器本质是上一个整数// 引用计数器,存储在对象内部,占据4个字节的存储空间// 引用计数器的数值表示该对象被引用的次数// 当使用new、alloc和copy创建一个新的对象的时候,引用计数器的值默认为1// 如果引用计数器的值减至0,则该对象在堆上占据的空间将被回收// 如果引用计数器的值不为0,则该对象在堆上占据的空间将被保留// 给一个对象发送一条retain消息,则该对象的引用计数器的值加1// 给一个对象发送一条release消息,则该对象的引用计数器的值减1// 给一个对象发送一条retainCount消息,则可获得该对象的引用计数器的值// 回收空间、销毁对象时,系统会自动向对象发送一条dealloc消息// 一般应重写对象的dealloc方法@interface Person : NSObject@end@implementation Person// 系统在销毁对象回收空间前,会自动调用对象的dealloc方法- (void)dealloc { NSLog(@"Person-dealloc"); // 重写一个对象的dealloc方法时,必须最终调用父类的dealloc方法 [super dealloc];}@endint main(int argc, char* argv[]) { @autoreleasepool { // 新创建的对象,引用计数器默认为1 Person* p = [[Person alloc] init]; // 向一个对象发送一条的retainCount消息,得到的返回类型是NSUInteger NSLog(@"[p retainCount] = %lu", [p retainCount]); // 调用一个对象的release方法,会使该对象的引用计数器的值加1 // 并且返回类型是id类型,返回值是该对象自身 [p retain]; NSLog(@"[p retainCount] = %lu", [p retainCount]); // 调用一个对象的release方法,会使该对象的引用计数器的值减1 [p release]; NSLog(@"[p retainCount] = %lu", [p retainCount]); // 当一个对象的引用计时器的值减至0时,该对象将被销毁 [p release]; // 堆中对象被系统销毁后,对象指针指向的地址不再可用 // 此刻,原对象被称为僵尸对象,原指针被称为野指针 // 如果向该野指针发送一条消息,会报告EXC_BAD_ACCESS错误,也称为野指针错误 // 将指针置空 p = nil; // OC中向一个空指针发送一条消息不会报告错误 [p retain]; [p release]; } return 0;}
0 0
- OC学习笔记-内存管理、retain、release和retainCount
- OC学习笔记四-1 内存管理(Retain-Release)
- 苹果如何管理:retainCount、retain、release
- 【OC学习-11】ARC和内存管理里面的alloc、assign、new、retain、copy、mutableCopy、release说明
- OC内存管理retainCount,dealloc
- cocos2d-x内存管理retain和release
- 内存管理1retain和release
- 内存管理中的retain和release用法
- Objective-C 内存管理retain和release
- IOS开发基础Object-C(07)—OC内存管理(1)-retain和release
- OC学习笔记07--OC中内存管理与循环retain问题
- ios笔记--retain,release介绍和setter方法的内存管理笔记
- Objective-c自学笔记(4)-内存管理中retain和release
- OC-内存管理之autorelease和release
- ios内存管理1-retain和release的简单使用
- ios内存管理1-retain和release的简单使用
- OC内存管理release、autorelease和set方法内存管理
- Iphone开发(5) retain,release,retainCount,dealloc
- JAVA中获取当前系统时间
- ListView添加删除FooterView
- Sqlite数据库sqlite3命令
- 梯度下降法迭代结束的条件
- 对荣格的评价
- OC学习笔记-内存管理、retain、release和retainCount
- 关于跨域调用web Api、Web Service等的解决方案。
- json_lib 和jackson 案列
- 完成端口列子
- sqlite3常用命令&语法
- Android模仿打字机效果的自定义View实现
- java基础多线程的介绍
- 实用小程序记录1-计算地球两点之间的距离
- Java中数组的遍历