`

内存计数基础原理

    博客分类:
  • IOS
 
阅读更多

 

有new、alloc、copy(计数器加一),就得release(计数器减一)

 

 

//
//  Person.h
//  a1
//
//  Created by mahongmin on 14-4-21.
//  Copyright (c) 2014年 mahongmin. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Book.h"

@interface Person : NSObject
{
    Book *_book;
}

- (void) setBook:(Book*)book;
- (Book*) book;

@end



================


//
//  Person.m
//  a1
//
//  Created by mahongmin on 14-4-21.
//  Copyright (c) 2014年 mahongmin. All rights reserved.
//

#import "Person.h"

@implementation Person


- (void) setBook:(Book*)book
{
    if (book != _book)// 防止p.book = b; 再来一次p.book = b
    {
        [_book release];// 此场景:如果p.book = b1,然后p.book = b2 那么,就需要此行来把b1 release掉。
        
        _book = [book retain];// book传递进来,那么等于Person对book进行了一次占用 内存占用+1
    }
}

- (Book*) book
{
    return _book;
}

-(void)dealloc
{
    // 当销毁人的时候,需把人占用的book也销毁
    [_book release];
    
    NSLog(@"释放人对象");
    [super dealloc];
}

@end
======================
//
//  Book.h
//  a1
//
//  Created by mahongmin on 14-4-23.
//  Copyright (c) 2014年 mahongmin. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Book : NSObject

@end


===========================
//
//  Book.m
//  a1
//
//  Created by mahongmin on 14-4-23.
//  Copyright (c) 2014年 mahongmin. All rights reserved.
//

#import "Book.h"

@implementation Book

- (void) dealloc
{
    NSLog(@"释放book对象");
    [super dealloc];
}

@end


====================================
//
//  main.m
//  a1
//
//  Created by mahongmin on 14-4-21.
//  Copyright (c) 2014年 mahongmin. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Book.h"

int main(int argc, const char * argv[])
{
    Person *p = [[Person alloc] init];
    
    Book *b = [[Book alloc] init];
    
    p.book = b;//此时,b指针指向的Book,计数为2
    
    [b release];
    b = nil;
    [p release];// 如果多次乱调[r release],写了p=nil后,此处不会再报EXC_BAD_ACCESS野指针错误。此时p为空对象,给空对象发送消息,不会产生空指针错误。跟java不一样
    p = nil;
    return 0;
}

 

 

分享到:
评论

相关推荐

    84、智能指针的原理、常用的智能指针及实现.pdf

    调⽤析构函数时,构造函数减少引⽤计数(如果引⽤计数减⾄0,则删除基础对象) (2) unique_ptr unique_ptr采⽤的是独享所有权语义,⼀个⾮空的unique_ptr总是拥有它所指向的资源。转移⼀个 unique_ptr将会把所有权...

    深入JVM内核 - 原理、诊断与优化

    引用计数 标记清除 复制算法 标记压缩 可触及性 本章是理论性较强的一章,主要介绍GC的基本算法和思想,本章作为下一章节的前序课程。 第五课 GC控制参数 Serial ParNew等GC参数 GC的参数搭配实例分析 介绍GC的...

    西安理工大学 微机原理课件

    因此,学习指令系统不仅是学习汇编语言的重要内容而且也是理解机器基本功能以及进行接口程序设计的重要基础。 本章全面系统地介绍了80x86指令系统的寻址方式、指令格式和各类指令的功能及应用。该指令系统的特点是:...

    Object-C语言教程&案例,要点难点,代码示例,代码解析

    内存管理:了解ARC(Automatic Reference Counting,自动引用计数)和MRC(Manual Reference Counting,手动引用计数)的工作原理。 Foundation框架:学习Foundation框架中提供的常用类,如NSString、NSArray、...

    《Android系统源代码情景分析》

    6.5 匿名共享内存的共享原理 第3篇 Android应用程序框架 第7章 Activity组件的启动过程 7.1 Activity组件应用实例 7.2 根Activity组件的启动过程 7.3 子Activity组件在进程内的启动过程 7.4 子Activity...

    可任意启动停止的电子秒表的设计.doc

    可任意启动/停止的电子秒表的设计 一、课程设计目的和任务 〈&lt;微机原理与接口技术&gt;〉是一门实践性很强的电子信息工程专业的技术基础课程 。因此,微机接口课程设计是一项实践性很强的实训环节,结合运用所学的汇编...

    大一大学计算机基础课程知识点.doc

    计算机工作原理〔存储程序即冯·诺依曼原理〔1946〕〕: 计算机系统由五大部分组成; 指令和数据都存放在储存器中,计算机工作时能够自动高速地从储存器中取出指令并执 行;用二进制形式表示数据和指令; 指令:规定...

    Android系统源代码情景分析-罗升阳-源码

    6.5 匿名共享内存的共享原理 第3篇 Android应用程序框架 第7章 Activity组件的启动过程 7.1 Activity组件应用实例 7.2 根Activity组件的启动过程 7.3 子Activity组件在进程内的启动过程 7.4 子Activity组件在...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    引用计数法(Reference Counting Collector) 59 tracing算法(Tracing Collector) 61 compacting算法(Compacting Collector) 61 copying算法(Coping Collector) 61 generation算法(Generational Collector) 62 ...

    单片机C语言程序设计实训100例基于8051+Proteus仿真

     2.2 仿真电路原理图设计  2.3 元件选择  2.4 调试仿真  2.5 Proteus与? V3的联合调试 第3章 基础程序设计  3.1 闪烁的LED  3.2 从左到右的流水灯  3.3 左右来回循环的流水灯  3.4 花样流水灯  3.5 LED模拟...

    深入理解程序设计使用Linux汇编语言

    深入理解程序设计.使用Linux汇编语言.高清.完整版 是否真正理解汇编语言,常常是普通程序员和优秀程序员的分水岭。《深入理解程序设计:使用Linux汇编语言》..., 计算机的计数原理;, 程序优化(时机、位置及方式)。

    Java虚拟机

    第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分...

    单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序)

    2.2 仿真电路原理图设计 2.3 元件选择 2.4 仿真运行 2.5 PROTEUS与AVR Studio的联合调试 2.6 PROTEUS在AVR单片机应用系统开发中的优势 第三章:基础程序设计 3.1 闪烁的LED 3.2 左右来回的流水灯 3.3 花样...

    单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真(源程序暂缺)

    2.2 仿真电路原理图设计 2.3 元件选择 2.4 仿真运行 2.5 PROTEUS与AVR Studio的联合调试 2.6 PROTEUS在AVR单片机应用系统开发中的优势 第三章:基础程序设计 3.1 闪烁的LED 3.2 左右来回的流水灯 3.3 花样...

    单片机计算器

     2.2仿真电路原理图设计  2.3元件选择  2.4调试仿真  2.5Proteus与&#61549;V3的联合调试 第3章基础程序设计  3.1闪烁的LED  3.2从左到右的流水灯  3.3左右来回循环的流水灯  3.4花样流水灯  3.5LED模拟交通...

    STM32嵌入式系统开发实战指南 FreeRTOS与LwIP联合移植Part1[机械工业出版社]

    第6章 操作系统原理基础知识 6.1 前后台模式应用程序 6.2 嵌入式操作系统 6.2.1 相关基本概念 6.2.2 系统调用 6.2.3 操作系统结构 6.2.4 进程与任务 6.2.5 进程间的通信 6.2.6 进程调度 6.2.7 存储管理 第7章 ...

Global site tag (gtag.js) - Google Analytics