欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}