有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; }
相关推荐
引用计数是最基础的内存管理策略,它简单地记录每个对象被引用的次数。当对象创建时,它的引用计数初始化为1。每当有一个新的引用指向这个对象,引用计数加1;当一个引用失效,计数减1。当对象的引用计数变为0时,...
深入理解JVM内存分配、垃圾收集(Garbage Collection, GC)原理以及垃圾收集器的工作方式对于优化程序性能至关重要。 首先,我们要了解JVM内存结构。在Java中,内存主要分为以下几个区域: 1. **堆内存(Heap)**...
3. 引用计数原理:理解引用计数如何影响对象生命周期,以及AddRef和Release的正确使用。 4. CoCreateInstance函数:学习如何使用这个函数来创建COM对象。 5. QueryInterface方法:理解如何通过该方法获取对象的其他...
内存管理是计算机操作系统中的...总结来说,内存智能释放是现代软件开发中不可或缺的一部分,它涉及到内存管理的基础原理、内存泄漏的防范以及各种优化策略。理解和掌握这些知识点,有助于编写出更加高效、稳定的程序。
《Proteus 8.9 8086CPU与微机原理:0.1s计数表模式1仿真解析》 在IT领域,尤其是在嵌入式系统设计和微控制器应用中,理解微机原理和8086CPU的工作机制至关重要。Proteus是一款强大的电子设计自动化软件,它为工程师...
单片机原理、接口及应用是嵌入式系统技术的基础,这一领域涵盖了广泛的知识点,主要涉及单片机的架构、指令系统、外围接口技术、程序设计等方面。本套课件由肖看编著,第二版,旨在深入浅出地讲解这些核心概念。 1....
计算机基础原理是理解信息技术核心的基石,而冯·诺依曼结构则是现代计算机设计的核心理念。这篇文章详细介绍了从计算机的基本单位——字节和进制,到计算机硬件的组成,再到冯·诺依曼体系结构的基本思想,为初学者...
本章节主要介绍了内存管理的基础知识,包括内存管理的重要性和基本原理、对象的生命周期、引用计数机制以及自动释放池的工作原理。此外,还介绍了协议与代理模式的概念及其在实际项目中的应用。通过学习这些基础知识...
本文档详细介绍了内存管理的基础知识和技术细节,包括不同内存管理方法的选择、折衷及其实现。通过学习这份资料,读者将能够更好地理解和掌握内存管理的核心概念和技术,这对于编写高效且健壮的应用程序至关重要。 ...
第一章介绍了内存管理的基本概念和原理。内存管理主要是指在程序运行过程中,对内存的分配、使用和回收进行控制。在C++中,内存管理主要通过操作符new和delete来实现动态内存的分配和释放。这一章节详细解释了这些...
总的来说,“对射计数传感器源码.rar”提供了一个基础框架,开发者可以根据具体需求进行修改和扩展,以适应各种不同的应用,例如生产线的自动化、物体追踪、运动检测等。深入理解和运用这个源码,有助于提升我们在...
1. **内存分区原理**:UCOS-II内存管理的核心是基于固定大小的内存块进行分配和回收。这些内存块被组织成一个个分区,每个分区中的内存块大小相同。这种设计有利于提高内存分配效率,尤其是在对小块内存需求频繁的...
学习OC语法包括理解消息传递机制、类和对象、属性、协议等概念,这些都是优化内存管理的基础。 2. **多线程**:在iOS应用中,多线程技术用于实现后台任务,提高用户体验。了解GCD(Grand Central Dispatch)、...
尽管ARC简化了内存管理,理解底层的引用计数原理仍然是编写高效Objective-C程序的关键。这有助于开发者更有效地使用内存资源,避免潜在的性能瓶颈。 #### 内存管理示例 为了更好地理解Objective-C中的内存管理机制...
本章节主要介绍微机原理与接口技术的基础知识,包括计算机中的计数制、机器码和真值、数制转换、微型计算机的基本工作原理等。 1. 计算机中的计数制有哪些? 计算机中常用的计数制有二进制、八进制、十进制(BCD)...
本课程将深入探讨单片机的基础知识,包括其组成、硬件结构以及工作原理。 1. **单片机组成** 单片机主要由以下几个部分组成: - **微处理器(CPU)**:执行指令、控制整个系统的运算和控制。 - **存储器**:包括...
单片机定时计数实验是电子工程领域中的基础实践,主要应用于各种自动化设备、智能硬件以及嵌入式系统。在本实验中,我们将探讨如何利用单片机实现定时和计数功能,具体包括0-9的计数以及0-59的定时显示。 单片机,...
总结,对内存进行读写操作是计算机系统中基础且关键的部分。理解内存的运作机制、掌握内存管理方法、了解内存优化策略以及防范内存安全问题,对于编写高效、安全的程序至关重要。通过不断学习和实践,你将能够更好地...
本文将详细介绍这门课程实验报告的七个部分,涵盖从基础的程序设计到复杂的应用开发的全过程。 在实验一中,我们学习了如何使用实验系统,并掌握了在KEIL软件环境中的仿真与调试技巧。实验的核心任务是编写一个计算...
Python的内存管理机制主要涉及以下几个方面:小整数对象池、intern机制、垃圾回收(引用计数、标记清除、分代回收)。 首先,小整数对象池是Python为提升程序性能而设计的一个优化机制。Python预分配了一个范围在[-...