OC语言day05-03单个对象内存管理
程序员文章站
2024-01-14 22:53:22
...
pragma mark 单个对象内存管理
pragma mark 概念
/**
ARC : Automaitc(自动) Reference(引用) Counting(计数) [编译器特性]
什么是自动引用计数?
不需要程序员管理内存, 编译器会在适当的 自动 给我们添加release
注意点: iOS中的ARC 和 Java中的垃圾回收机制不太一样, java中的垃圾回收 是系统回收的\
而OC中的ARC是编译器干得
MRC : Manul(手动) Reference(引用) Counting(计数)
什么是手动引用计数?
所有对象的内存管理都要我们手动管理, 需要程序自己填写 release / retain 代金券
内存管理的原则就是 有加就有减
也就是说, 一次alloc对应一次release, 一次retain就对应一次release
*/
pragma mark 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
{
// 只要创建一个对象 默认引用计数器就是1
Person *p = [[Person alloc]init];
NSLog(@" retainCount = %lu",[p retainCount]);
#warning 只要给对象发送一个retain消息, 对象的引用计数器就会 + 1
[p retain];
NSLog(@" retainCount = %lu",[p retainCount]); // 2
// 通过指针变量p, 给p指向的对象 发送一条release消息
// 只要对象 接收到 release消息, 引用计数器就会-1
// 只要一个对象的引用计数器为0, 系统就会释放对象
NSLog(@" retainCount = %lu",[p retainCount]); // 2
#warning 注意: release并不代表销毁\回收对象,仅仅是计数器 -1
[p release]; //从Xcode 4.2 之后 项目的工程默认就是ARC(自动管理内存) 之前的叫做MRC
NSLog(@" retainCount = %lu",[p retainCount]); // 1
[p release]; // 0
NSLog(@" -------" ); // 2
// retainCount 1
}
// [p setAge:20];
#warning 如何将程序转换成MRC (即时通话)
return 0;
}
上一篇: OC复习
下一篇: java(18) - 枚举类型和静态导入