`

内存学习

    博客分类:
  • ios
 
阅读更多

参考文档1:http://blog.csdn.net/hudashi/article/details/7709421


内存管理

每个对象都有一个与之关联的引用计数(也叫保留计数)

当使用alloc, new 方法或通过 copy消息(生成接收对象的一个副本)创建一个对象时,对象的引用计数值被设为1;

 给对象发retain消息时,增加该值;

 发送release消息时,减少该值;

当一个对象的引用计数值变为0时,objective-c会自动向对象发送一条dealloc消息。销毁该对象。

你可以在自己的对象中重写该方法,

使用retainCount消息,可以获取引用计数器的值。

-(id) retain;

-(void) release;

-(unsigned) retainCount;    

自动释放池:autorelease pool;

创建:

NSAutoreleasePool *pool;

pool=[[NSAutoreleasePool alloc] init];

销毁:

[pool release];

注意:xcode自动生成的代码,销毁pool池时,使用的是[pool drain],drain方法只是清空释放池,但不销毁pool.所以在自己编写代码时还是使用release.

而且,drain只适用于MAC OS 10.4以上的版本,而release适用于所有版本。

只有在向某个对象发送autorelease消息时,该对象才会添加到NSAutoreleasepool中,才会被自动释放。

如:[car autorelease];

内存管理黄金准则: 

只有通过alloc, new和 copy方法创建的对象,才需要程序员负责向该对象发送release或autorelease消息。

而通过其他方法获得的对象,则默认为已经被设置为自动释放,所以不需要程序员做任何操作了。

在objective-c 2.0中有垃圾回收机制,

如果要对某个项目使用垃圾回收:

项目信息--build选项卡--查询"garb",出现“objective-c Garbage Collection”,将其值设置为“required[-fobjc-gc-only]”

启用垃圾回收后,通常的内存管理命令全都变成了空操作指令,不执行任何操作。

开发iphone软件,不能使用垃圾回收。

分享到:
评论

相关推荐

    记录自己共享内存学习笔记

    记录自己共享内存学习笔记 共享内存是一种进程间通信方式,它允许多个进程共享同一块物理内存区域,以实现进程之间的信息交换。共享内存的原理是将同一块物理内存映射到多个进程的地址空间中,使得多个进程可以访问...

    终极内存技术指南---内存学习必备

    内存最全面的介绍了,对内存感兴趣的必下 讲完SDRAM的外在形式,就该深入了解SDRAM的内部结构了。这里主要的概念就是逻辑Bank。简单地说,SDRAM的内部是一个存储阵列。因为如果是管道式存储(就如排队买票),就很难...

    c c++不可不知的知识 分析内存 从内存学习c C++经典全是我多年整理的

    在C和C++编程语言中,对内存的理解和管理是至关重要的技能,因为它们提供了对内存的低级控制。本文将深入探讨C和C++中的内存管理,包括内存区域、分配与释放、内存泄漏以及内存对齐等核心知识点。 首先,我们需要...

    windows内存学习总结

    在Windows操作系统中,内存管理是系统性能的关键因素之一。它涉及到如何有效地分配、使用和回收内存资源,确保程序的高效运行。以下是对Windows内存管理的深入解析: 一、内存分配 1. **基本概念**:内存是计算机...

    共享内存 简单易懂的学习共享内存

    共享内存,简单易懂的学习共享内存, 是学习共享内存的入门

    内存表操作(帮助大家学习)

    学习这部分内容,可以帮助开发人员提升Web应用的响应速度和用户体验。 总之,内存表操作对于提升数据库性能和开发效率至关重要。通过深入理解和熟练运用内存表,开发人员可以在满足业务需求的同时,实现更高效的...

    基于深度学习和内存取证技术的恶意软件检测框架.zip

    【深度学习与内存取证在恶意软件检测中的应用】 在当今的数字时代,恶意软件的威胁日益严重,对个人隐私和企业信息安全构成巨大挑战。为了有效应对这一问题,研究人员正在探索结合人工智能,特别是深度学习,以及...

    c++内存搜索学习

    本文将深入探讨C++内存搜索的学习,包括基础知识、搜索方法以及相关实践。 首先,了解C++内存管理的基础是必要的。C++允许程序员直接管理内存,通过`new`运算符动态分配内存,`delete`运算符释放内存。程序中的变量...

    学习写游戏内存数据源码

    游戏内存数据源码的学习是一个深度探索游戏编程领域的过程,它涉及到计算机内存管理、游戏引擎原理、数据结构与算法等多个方面的知识。在这个过程中,你需要理解如何读取和修改游戏运行时的内存数据,这对于游戏调试...

    Java内存机制学习和使用

    ### Java内存机制学习和使用 #### 一、Java内存机制概览 Java内存管理是Java开发人员必须掌握的核心概念之一。良好的内存管理不仅能够提升应用性能,还能避免常见的内存泄漏问题。本文旨在深入探讨Java内存机制,...

    linux学习资料——内存管理

    在Linux操作系统中,内存管理是其核心功能之一,它对系统的稳定性和性能有着至关重要的影响。...Linux Memory Manager.ppt文件很可能会进一步阐述这些主题,并可能包含具体的实践技巧和示例,帮助你深入学习。

    内存修改文档 学习内存遍历必备

    文档“内存修改文档 学习内存遍历必备”很可能提供了关于如何进行内存操作的详细教程。 内存遍历是内存修改的基础,它是指在程序运行过程中,通过编程手段遍历进程的内存空间,查找特定的数据或结构。这通常需要...

    内存清理 清理内存

    对于初学者来说,这是一次很好的实践机会,可以学习如何通过编程实现内存的检查和释放。通过分析和运行这个Demo,你可以了解到内存清理的基本步骤: 1. 检测内存使用情况:首先,需要获取当前系统或应用程序的内存...

    《深入理解LINUX内存管理》学习笔记a.PDF

    《深入理解LINUX内存管理》学习笔记a.PDF

    易语言内存释放演示

    通过这两个子程序,开发者可以学习如何在易语言中有效地进行内存操作,确保程序运行的稳定性和效率。 在源码分析中,我们通常会关注以下几个方面: 1. **内存分配**:易语言中的内存分配可能使用了类似“内存开辟...

    ucos-ii学习笔记——动态内存分配原理及使用

    在嵌入式系统开发中,操作系统如UCOS-II扮演着至关重要的角色,它提供了一系列的内核服务,包括任务调度、时间管理以及内存...通过这样的学习和实践,开发者可以更好地掌控系统的资源利用,从而优化系统性能和稳定性。

    About-Shared-Memory.rar_Shared memory_memory

    综上所述,这个压缩包提供了从基础到高级的共享内存学习资源,涵盖了 C 和 C++ 语言环境下的实现,以及内存管理的实战练习。通过学习这些内容,你可以深入了解如何在多进程中有效地使用共享内存,并提高在内存管理...

    Android学习资料之内存优化.zip

    这个名为"Android学习资料之内存优化.zip"的压缩包包含了一些关于Android内存优化的重要文档,这些文档深入探讨了常见的内存泄露问题以及对应的优化策略。以下是根据这些知识点进行的详细解读: 1. **内存泄露**:...

    关于C语言程序的内存分配的入门知识学习

    总的来说,C语言程序的内存分配是一个涉及程序运行时数据组织和管理的核心概念,深入学习这一主题将对提升编程技能和解决问题能力大有裨益。通过实践和不断探索,程序员可以更好地掌握内存管理的艺术,编写出更高...

    C和C++内存管理资料(包括内存管理-内存泄漏-内存调试-内存检测方法)

    在IT领域,C和C++是两种非常重要的编程语言,它们以其高效性和灵活性深受程序员喜爱...通过学习这些材料,你可以更好地掌握内存管理的原则,预防和解决内存泄漏,以及有效地进行内存调试和检测,从而提升你的编程技能。

Global site tag (gtag.js) - Google Analytics