iOS复习笔记5:内存管理之set方法

1 alloc和release成对出现

2 set方法

2.1 基础类型直接赋值

2.2 OC对象:判断不等、retain新的,释放旧的,再赋值

3 dealloc方法

3.1 一定要调用[super dealloc];且放在最后

3.2 self拥有的对象要做一次release

@interface Book
{
	int _price;
}

- (void)setPrice:(int)price;
- (int)price;

@end
@implementation Book

- (void)setPrice:(int)price
{

	_price = price;
}

- (int)price
{
	return _price;
}

- (void)dealloc
{
	[_book release];
	_book = nil;

	[super dealloc];
}

@end
@interface Person
{
	Book* _book;
}

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

@end
@implementation Person

- (void)setBook:(Book*)book
{
	// retain新的,release旧的,把新的赋给旧的
	if (_book != book){
		[book retain];
		[_book release];
		_book = book;
	}

	/* 可以简写为:
	if (_book != book){
		[_book release];
		_book = [book retain];
	}
	*/
}

- (Book*)book
{
	return _book;
}

@end
#import <Foundation/Foundation.h>

int main()
{
	Person* person = [[Person alloc] init];

	Book* book = [[Book alloc] init];
	[person setBook:book];
	[book release];
	book = nil;

	[person release];

	return 0;
}

时间: 2024-10-11 10:56:19

iOS复习笔记5:内存管理之set方法的相关文章

iOS复习笔记4:内存管理

一 基础原理 1 为什么需要内存管理 因为移动设备内存有限,每个app所占用的空间有限. 当app占用内存空间过多时,系统会发出内存警告,这是回收一些不在使用的内存. 例如:不再使用的类对象和实例. 2 管理对象 任何继承自NSObject类的对象 3 内存区域 堆:主动分配空间,需要管理 栈:局部变量,自动管理 例如: int a = 1; Person* p = [[Person alloc] init]; a,p都放在栈区 Person分配的空间在堆区 二 引用计数 1 定义 每个OC对象

iOS学习笔记之内存管理及@property

iOS5之后苹果公司引入了ARC机制,大大方便了ios开发者对内存的管理机制.在iphone 4出世的时候为什么ios在512M的内存中可以运行很大的游戏,保持畅快流畅的状态.得益于ios非常好的内存处理机制. 在我们现在创建项目的时候,默认会直接引入ARC机制,我们可以关闭ARC机制:在输入框中输入long点击搜索按钮,如图: 接下来即可进行老版本的内存操作了. 在老版本中,内存操作采用了引用计数(retainCount)alloc retain(+1)release(-1) 内存管理原则(配

ios学习笔记之内存管理

一,内存管理类型定义      1,基本类型  任何C的类型,eg:      int,short,char,long,long long,struct,enum,union等属于基本类型或结构体      内存管理对于C语言的基本类型无效      2,OC类型(非基本类型)      任何继承于NSObject类的对象都属于OC类型      也就是除了C之外的其他类型 二,OC对象结构      所有OC对象都有着一个计数器,保留着当前对象被引用的数量,如果计数器为0,那么就真正的释放这个

《python源码剖析》笔记 pythonm内存管理机制

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.内存管理架构 Python的内存管理机制都有两套实现:debug模式和release模式 Python内存管理机制的层次结构: 图16-1 第0层是操作系统提供的内存管理接口,如malloc.free 第1层是Python基于第0层操作系统的内存管理接口包装而成的,主要是为了处理与平台相关的内存分配行为. 实现是一组以PyMem_为前缀的函数族 两套接口:函数和宏. 宏,可以避免函数调

linux kernel学习笔记-5内存管理(转)

http://blog.sina.com.cn/s/blog_65373f1401019dtz.htmllinux kernel学习笔记-5 内存管理1. 相关的数据结构 相比用户空间而言,在内核中分配内存往往受到更多的限制,比如内核中很多情况下不能睡眠,此外处理内存分配失败也不像用户空间那么容易.内核使用了页和区两种数据结构来管理内存: 1.1 页 内核把物理页作为内存管理的基本单位.尽管CPU的最小可寻址单位通常为字(甚至字节),但是MMU(内存管理单元,管理内存并把虚拟地址转换为物理地址的

Linux System Programming 学习笔记(九) 内存管理

1. 进程地址空间 Linux中,进程并不是直接操作物理内存地址,而是每个进程关联一个虚拟地址空间 内存页是memory management unit (MMU) 可以管理的最小地址单元 机器的体系结构决定了内存页大小,32位系统通常是 4KB, 64位系统通常是 8KB 内存页分为 valid or invalid: A valid page is associated with an actual page of data,例如RAM或者磁盘上的文件 An invalid page is

《30天自制操作系统》笔记(07)——内存管理

<30天自制操作系统>笔记(07)--内存管理 进度回顾 上一篇中处理掉了绝大部分与CPU配置相关的东西.本篇介绍内存管理的思路和算法. 现在想想,从软件工程师的角度看,CPU也只是一个软件而已:它的功能就是加载指令.执行指令和响应中断,而响应中断也是在加载指令.执行指令.就像火车沿着一条环形铁轨前进:当中断发生时,就好像铁轨岔口处变轨了,火车就顺着另一条轨迹走了:走完之后又绕回来重新开始.决定CPU是否变轨的,就是CPU里的特定寄存器. 这是题外话,就此为止. 什么是内存管理 假设内存大小是

操作系统概念学习笔记 15 内存管理(一)

操作系统概念学习笔记 15 内存管理(一) 背景 内存是现代计算机运行的中心.内存有很大一组字或字节组成,每个字或字节都有它们自己的地址.CPU根据程序计数器(PC)的值从内存中提取指令,这些指令可能会引起进一步对特定内存地址的读取和写入. 一个典型指令执行周期,首先从内存中读取指令.接着该指令被解码,且可能需要从内存中读取操作数.在指令对操作数执行后,其结果可能被存回到内存.内存单元只看到地址流,而并不直到这些地址是如何产生的(由指令计数器.索引.间接寻址.实地址等)或它们是什么地址(指令或数

操作系统概念学习笔记 16 内存管理(二) 段页

操作系统概念学习笔记 16 内存管理 (二) 分页(paging) 分页(paging)内存管理方案允许进程的物理地址空间可以使非连续的.分页避免了将不同大小的内存块匹配到交换空间上(前面叙述的内存管理方案都有这个问题,当位于内存中的代码和数据需要换出时,必须现在备份存储上找到空间,这是问题就产生了.备份存储也有前面所述的与内存相关的碎片问题,只不过访问更慢). 传统上,分页支持一直是由硬件来处理的.最近的设计是通过将硬件和操作系统相配合来实现分页. 基本方法 实现分页的基本方法设计将物理内存分