`
zl4393753
  • 浏览: 340300 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

内存管理法则

 
阅读更多
Basic Memory Management Rules
基本内存管理原则

The memory management model is based on object ownership. Any object may have one or more owners. As long as an object has at least one owner, it continues to exist. If an object has no owners, the runtime system destroys it automatically. To make sure it is clear when you own an object and when you do not, Cocoa sets the following policy:

You own any object you create
你会拥有任何自己创建的对象
You create an object using a method whose name begins with “alloc”, “new”, “copy”, or “mutableCopy” (for example, alloc, newObject, or mutableCopy).
使用名为“alloc”、“new”、“copy”或者“mutableCopy”(比如,alloc,newObject,or mutableCopy)创建一个对象

You can take ownership of an object using retain
你会接管你对它使用retain的对象
A received object is normally guaranteed to remain valid within the method it was received in, and that method may also safely return the object to its invoker. You use retain in two situations: (1) In the implementation of an accessor method or an init method, to take ownership of an object you want to store as a property value; and (2) To prevent an object from being invalidated as a side-effect of some other operation (as explained in “Avoid Causing Deallocation of Objects You’re Using”).

When you no longer need it, you must relinquish ownership of an object you own
当你不需要这个对象的时候,你必须放弃这段从属关系
You relinquish ownership of an object by sending it a release message or an autorelease message. In Cocoa terminology, relinquishing ownership of an object is therefore typically referred to as “releasing” an object.
使用release或者autorelease放弃关系

You must not relinquish ownership of an object you do not own
千万不要放弃与自己无关的从属关系
This is just corollary of the previous policy rules, stated explicitly.


Ownership Policy Is Implemented Using Retain Counts

The ownership policy is implemented through reference counting—typically called “retain count” after the retain method. Each object has a retain count.

When you create an object, it has a retain count of 1.
创建对象的时候,retain count为1

When you send an object a retain message, its retain count is incremented by 1.
retain一个对象的时候,该对象的retain count 加1

When you send an object a release message, its retain count is decremented by 1.
release一个对象的时候,该对象的retain count减1

When you send an object a autorelease message, its retain count is decremented by 1 at the end of the current autorelease pool block.
autorelease一个对象的时候,该对象的retain count从当前autorelease pool block的末尾减1

If an object’s retain count is reduced to zero, it is deallocated.
当一个对象的retain count减至零,它会被dealloc

Important: There should be no reason to explicitly ask an object what its retain count is (see retainCount). The result is often misleading, as you may be unaware of what framework objects have retained an object in which you are interested. In debugging memory management issues, you should be concerned only with ensuring that your code adheres to the ownership rules.

Use Accessor Methods to Make Memory Management Easier
Use Accessor Methods to Set Property Values
Suppose you want to implement a method to reset the counter. You have a couple of choices. The first implementation creates the NSNumber instance with alloc, so you balance that with a release.

Don’t Use Accessor Methods in Initializer Methods and dealloc
The only places you shouldn’t use accessor methods to set an instance variable are in initializer methods and dealloc. To initialize a counter object with a number object representing zero, you might implement an init method

Avoid Causing Deallocation of Objects You’re Using
1. When an object is removed from one of the fundamental collection classes.
When an object is removed from one of the fundamental collection classes, it is sent a release (rather than autorelease) message. If the collection was the only owner of the removed object, the removed object (heisenObject in the example ) is then immediately deallocated.

2. When a “parent object” is deallocated.
In some situations you retrieve an object from another object, and then directly or indirectly release the parent object. If releasing the parent causes it to be deallocated, and the parent was the only owner of the child, then the child (heisenObject in the example) will be deallocated at the same time (assuming that it is sent a release rather than an autorelease message in the parent’s dealloc method).


算了。。。写了这么多白写了。。。看官方的内存管理指南就可以了。。多看才有用。。









分享到:
评论

相关推荐

    内存管理算法(中文)

    内存管理是计算机操作系统中的核心组件,负责有效地分配和回收内存资源。不同的内存管理算法有着各自的优势和适用场景,本文将详细解析几种经典的内存管理算法。 首先,First-Fit(首次适应算法)是最基础的一种...

    操作系统内存管理实验

    在这个"操作系统内存管理实验"中,我们将深入探讨两种主要的内存管理策略:基本的内存管理和请求分页内存管理。 首先,基本的内存管理通常包括固定分区和可变分区两种方式。固定分区是将内存划分为若干固定大小的...

    内存管理器

    内存管理是计算机操作系统中的核心组件,它负责有效地分配和回收内存资源,确保程序的正常运行。在本项目中,我们将探讨几种常见的内存分配算法,并分析它们的效率。 首先,我们来了解一下基本的内存管理概念。...

    操作系统内存分配实验

    在这个实验中,我们将聚焦于内存管理的基本概念,特别是内存分配策略,以及如何通过编程语言(如VC++)来模拟这些过程。 内存管理是操作系统的核心功能之一,它涉及内存的分配、回收、地址映射和保护等多个方面。...

    胡凯 - Android内存优化之5R法则

    下面,我们将详细解释这些优化法则,以及与内存管理相关的基础概念。 首先,Release(释放)指的是及时释放不再需要的资源。在Android中,常见的资源包括文件描述符、网络连接、数据库连接等,这些资源如果不及时...

    cpu调度模拟和内存分配和管理

    这些文件在运行或分析内存管理和CPU调度模拟时可能作为输入或输出,帮助我们理解系统的实际运行情况。 总的来说,CPU调度模拟和内存分配管理是操作系统中复杂且关键的两个方面,它们直接影响到系统的性能和可靠性。...

    iOS内存管理1

    谁创建,谁释放是iOS内存管理的基本法则。开发者需要在适当的时候释放对象,以避免内存泄露。 深拷贝和浅拷贝 深拷贝和浅拷贝是iOS内存管理中两个重要的概念。深拷贝是指创建一个对象的完全副本,而浅拷贝是指创建...

    操作系统 内存管理 问题

    内存管理是操作系统中的关键功能,因为它直接影响到系统性能、程序执行效率以及资源利用率。本篇文章将详细探讨内存管理的各个方面,包括内存的分配、撤销、紧凑和合并操作。 内存分配是指在操作系统中为进程或程序...

    模拟内存管理,操作系统课程作业.zip

    在操作系统领域,内存管理是一项核心任务,它涉及到如何有效地分配、使用和回收系统内存,以满足多个并发运行的进程需求。这份"模拟内存管理,操作系统课程作业"可能是一份实践性的学习材料,旨在帮助学生深入理解...

    iOS 内存管理机制 详细解读

    放入栈中。此区域的内存由编译器...了解并掌握内存管理是开发iOS应用的关键,合理的内存管理能确保应用的性能和稳定性。无论是手动的MRC还是自动的ARC,都需要开发者对内存管理有深入的理解,防止内存泄漏和意外崩溃。

    内存管理.doc

    内存管理是操作系统中的核心组成部分,它负责有效地分配和回收计算机的内存资源,以确保多个进程可以并发执行并高效地共享内存。在这个上机实验中,我们将深入理解内存管理的几个关键概念和技术,包括内存分配算法和...

    操作系统内存管理算法

    操作系统内存管理是计算机系统中的关键部分,它负责管理和优化有限的物理内存资源,以供多个进程高效地共享和使用。本篇文章将详细讨论四种常见的页面置换算法:FIFO(先进先出)、LRU(最近最少使用)、OPT(最佳)...

    内存管理模型的设计实现分析.doc

    《内存管理模型的设计实现分析》 内存管理是操作系统的核心功能之一,它负责有效地分配、使用和回收系统的内存资源。本报告将深入探讨内存管理模型的设计和实现,主要关注可变分区的链表法管理、内存分配策略以及...

    内存管理源码

    内存管理是计算机操作系统中的核心组件之一,它负责有效地分配、回收和组织系统内存,确保程序的高效运行。本文将深入探讨内存管理的源码实现,包括内存分配策略、内存回收机制以及内存碎片处理等方面。 首先,内存...

    操作系统实验—存储管理-动态分区法

    操作系统是计算机系统的核心组成部分,它负责管理和控制计算机的硬件资源,包括内存资源。在这个特定的实验中,我们关注的是“动态分区法”这一存储管理策略,这是操作系统中用于分配和管理内存的重要方法。 动态...

    4. 三五法则1

    "三五法则"是C++编程中关于对象生命周期管理和资源控制的一个重要概念,它涉及到类的设计和对象的拷贝、赋值以及销毁过程中的行为。在C++98标准中,这一规则通常被称为"三法则",主要包括析构函数、拷贝构造函数和...

    操作系统实验之内存管理实验报告(1).pdf

    操作系统实验之内存管理是计算机科学与技术领域中的一个重要实践环节,旨在让学生深入理解内存管理机制。在这个实验中,学生需要模拟实现不同的内存管理方案,如动态分区式、请求页式、段式、段页式等。实验的具体...

    操作系统 内存的分配与回收 实验报告

    操作系统中的内存管理是确保系统高效运行的关键组成部分。内存分配与回收是操作系统中内存管理的核心任务,涉及如何有效地分配内存给进程以及在进程结束或需要更多资源时如何回收内存。本实验报告将详细探讨这两个...

    内存管理实验报告.doc

    内存管理是操作系统中的核心组成部分,它负责有效地分配和回收计算机的内存资源,以确保多个进程可以并发执行且高效地利用内存。在这个实验报告中,主要关注的是动态分区存储管理,这是早期操作系统中常见的一种内存...

    不定长内存池算法

    在C++编程中,内存管理是至关重要的,因为它涉及到程序的效率和资源利用率。不定长内存池算法则是在内存池的基础上,允许动态分配不同大小的内存块,以适应多种数据结构和对象的需求。 不定长内存池算法的核心思想...

Global site tag (gtag.js) - Google Analytics