注意在写代码的时候,只要创建了对象,用完这个对象之后必须记得要调用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方法内存管理相关推荐

  1. OC基础15:内存管理和自动引用计数

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...

  2. OC 知识:彻底理解 iOS 内存管理(MRC、ARC)

    1. 什么是内存管理 程序在运行的过程中通常通过以下行为,来增加程序的的内存占用 创建一个OC对象 定义一个变量 调用一个函数或者方法 而一个移动设备的内存是有限的,每个软件所能占用的内存也是有限的 ...

  3. 黑马程序员--Objective-C之--OC中的内存管理

    ------IOS培训期待与您交流! ------- 对于面向对象的变成语言,程序需要不断地创建对象. 初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法, ...

  4. iOS经典面试题总结--内存管理

    内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被创建时retain count+1 ...

  5. [objective-c] 08 - 内存管理

    OC语言中的内存管理机制为ARC(Automatic Reference Counting,自动引用计数).于2011年中旬推出,替换陈旧且低效的手动内存管理,关于手动内存管理的内容,本章教程不再讲授 ...

  6. OC-引用计数器,内存管理,野指针

    总结 全局断点 →-->+-->Add Exception Breakpoint 开启僵尸监听 打开Edit scheme -->Diagnostics-->Enable Zo ...

  7. iOS内存管理—MRC

    文章目录 预备知识 手动引用计数MRC 自己生成的对象,自己持有 非自己生成的对象,自己也能持有 不再需要自己持有的对象时释放 无法释放非自己持有的对象 @property参数 MRC中避免循环ret ...

  8. iOS 开发:彻底理解 iOS 内存管理(MRC 篇)

    本文首发于我的个人博客:「程序员充电站」 文章链接:「传送门」 本文更新时间:2021年08月17日17:11:59 本文是 「iOS 开发:彻底理解 iOS 内存管理」系列的「MRC 篇」. 用来对 ...

  9. 可能是史上最全面的内存管理文章

    iOS内存管理 概述 什么是内存管理 应用程序内存管理是在程序运行时分配内存(比如创建一个对象,会增加内存占用)与清除内存(比如销毁一个对象,会减少内存占用)的过程 为什么要管理内存 目前iPhone ...

最新文章

  1. matlab视频保存为图片
  2. android 获取视频大小,Android 获取视频缩略图(获取视频每帧数据)的优化方案
  3. RabbitMQ中的消息不可达returnlistener和mandatory的使用
  4. C++里如何使用功能键(F1、F2·····)进行操纵?
  5. virtualbox4 剪贴板(共享粘贴板)失效之原因
  6. 在Angular单元测试代码的it方法里连续调用两次detectChange方法,会触发两次ngAfterViewInit吗
  7. echarts 不支持 手机 浏览器_最佳实践 | 地图加载慢,还不支持现有浏览器?巧用 Mapbox 静态地图!...
  8. 栈和队列之用2个栈实现一个队列
  9. JS中数组的常用方法
  10. 【Kaggle】Intermediate Machine Learning(缺失值+文字特征处理)
  11. 关于 Flutter Layout(转载)
  12. 语音识别合成助手-语音识别合成助手下载 v20190223免费版--pc6下载站
  13. python 有趣的爬虫_Python有趣|微博榜单爬虫,尽知天下事
  14. 设计模式-02-创建型模式详解
  15. Docker与.Net项目类型
  16. clousx6机器人怎么导入词库_clousx6词库编程从零入门:3
  17. 三位深度学习之父共获2019年图灵奖,学术人生令人赞叹!!!
  18. java中tab键_Java 9中的JShell中Tab键的用途是什么?
  19. 高德h5定位误差_高德地图定位JS API不准确问题
  20. C:\ProgramData\Microsoft\VisualStudio创建软连接,腾出C盘空间

热门文章

  1. 制作一个简易的ATM取款机
  2. Coding Stlye
  3. swagger2 配置访问路径_swagger2访问url
  4. SPA和MVVM设计思想
  5. linux———centos下安装redis(快捷方式)
  6. 唯一上市运动相机厂商GoPro遭遇退市危机
  7. springboot 集成百度编辑器ueditor
  8. 淘宝主图、图片、sku、价格、销量等...
  9. 分块 公主的朋友
  10. libc.so.6 导致Linux系统崩溃