OC之set方法内存管理
注意在写代码的时候,只要创建了对象,用完这个对象之后必须记得要调用release方法,要使用这个对象的时候必须调用retain方法。
比如拿人看书这个例子:
首先有一个人p1看书b,
Person *p1 = [[Person alloc]init];//p1计数器=1
Book *b = [[Book alloc] init];//b计数器=1
[p1 setBook:b]; //b计数器=2
[p1 release]; //p1计数器=0
P1 = nil;
人当中有个setBook方法,让人能拿一本书去看,上述[p1 setBook:b]
就是调用了该方法,P1 = nil是清空p1,下面就是setBook方法的实现:
- (void)setBook:(Book *)book
{
/*首先要做一个判断,book=_book时,b的计数器就为1,表示传进来的还是旧对象,不是新对象。如果此时再[ _book realease],b的计数器就为0了,后面再[bookretain]就会报错,因为b无法”死而复生“,所以必须保证book != _book*/
if(book!= _book){
[_book realease];//b计数器=1
_book= [book retain];
}
}
上述_book = [book retain]就是让人去拿一本书看,以书为参照物,就是这本书有一个人在看,[book retain]返回的就是书对象,在返回这个个新的书对象之前,应先将原来的书对象release掉,故在调用[book retain]前应先调用[ _book realease]。在最上面调用了[p1 release],说明这个人离开不看书了,所以此时应调用书的release。也就是在人这个对象被销毁的时候调用这本书的release方法,如下:
- (void)dealloc
{
[ _book release]; //b计数器=0
NSLog(@”Person对象被回收”);
[superdealloc];
}
OC之set方法内存管理相关推荐
- OC基础15:内存管理和自动引用计数
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...
- OC 知识:彻底理解 iOS 内存管理(MRC、ARC)
1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的 ...
- 黑马程序员--Objective-C之--OC中的内存管理
------IOS培训期待与您交流! ------- 对于面向对象的变成语言,程序需要不断地创建对象. 初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法, ...
- iOS经典面试题总结--内存管理
内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被创建时retain count+1 ...
- [objective-c] 08 - 内存管理
OC语言中的内存管理机制为ARC(Automatic Reference Counting,自动引用计数).于2011年中旬推出,替换陈旧且低效的手动内存管理,关于手动内存管理的内容,本章教程不再讲授 ...
- OC-引用计数器,内存管理,野指针
总结 全局断点 →-->+-->Add Exception Breakpoint 开启僵尸监听 打开Edit scheme -->Diagnostics-->Enable Zo ...
- iOS内存管理—MRC
文章目录 预备知识 手动引用计数MRC 自己生成的对象,自己持有 非自己生成的对象,自己也能持有 不再需要自己持有的对象时释放 无法释放非自己持有的对象 @property参数 MRC中避免循环ret ...
- iOS 开发:彻底理解 iOS 内存管理(MRC 篇)
本文首发于我的个人博客:「程序员充电站」 文章链接:「传送门」 本文更新时间:2021年08月17日17:11:59 本文是 「iOS 开发:彻底理解 iOS 内存管理」系列的「MRC 篇」. 用来对 ...
- 可能是史上最全面的内存管理文章
iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与清除内存(比如销毁一个对象,会减少内存占用)的过程 为什么要管理内存 目前iPhone ...
最新文章
- matlab视频保存为图片
- android 获取视频大小,Android 获取视频缩略图(获取视频每帧数据)的优化方案
- RabbitMQ中的消息不可达returnlistener和mandatory的使用
- C++里如何使用功能键(F1、F2·····)进行操纵?
- virtualbox4 剪贴板(共享粘贴板)失效之原因
- 在Angular单元测试代码的it方法里连续调用两次detectChange方法,会触发两次ngAfterViewInit吗
- echarts 不支持 手机 浏览器_最佳实践 | 地图加载慢,还不支持现有浏览器?巧用 Mapbox 静态地图!...
- 栈和队列之用2个栈实现一个队列
- JS中数组的常用方法
- 【Kaggle】Intermediate Machine Learning(缺失值+文字特征处理)
- 关于 Flutter Layout(转载)
- 语音识别合成助手-语音识别合成助手下载 v20190223免费版--pc6下载站
- python 有趣的爬虫_Python有趣|微博榜单爬虫,尽知天下事
- 设计模式-02-创建型模式详解
- Docker与.Net项目类型
- clousx6机器人怎么导入词库_clousx6词库编程从零入门:3
- 三位深度学习之父共获2019年图灵奖,学术人生令人赞叹!!!
- java中tab键_Java 9中的JShell中Tab键的用途是什么?
- 高德h5定位误差_高德地图定位JS API不准确问题
- C:\ProgramData\Microsoft\VisualStudio创建软连接,腾出C盘空间