OC语言day05-03单个对象内存管理

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 
#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语言day05-03单个对象内存管理)