初学Objective-C的朋友都有一个困惑,总觉得对Objective-C的内存管理机制琢磨不透,程 序经常内存泄漏或莫名其妙的崩溃。我在这里总结了自己对Objective-C内存管理机制的研究成果和经验,写了这么一个由浅入深的教程。希望对大家有 所帮助,也欢迎大家一起探讨。

@property (retain)和@synthesize的默认实现

在这里解释一下@property (retain) ClassB* objB;和@synthesize objB;背后到底发生了什么(retain property的默认实现)。property实际上是getter和setter,针对有retain参数的property,背后的实现如下(请参考附件中的memman-getter-setter.m,你会发现,结果和memman-property.m一样):

  1. @interface ClassA : NSObject
  2. {
  3. ClassB *objB;
  4. }
  5. -(ClassB *) getObjB;
  6. -(void) setObjB:(ClassB *) value;
  7. @end
  8. @implementation ClassA
  9. -(ClassB*) getObjB
  10. {
  11. return objB;
  12. }
  13. -(void) setObjB:(ClassB*) value
  14. {
  15. if (objB != value)
  16. {
  17. [objB release];
  18. objB = [value retain];
  19. }
  20. }

在setObjB中,如果新设定的值和原值不同的话,必须要把原值对象release一次,这样才能保证retain count是正确的。

由于我们在class内部retain了一次(虽然是默认实现的),所以我们要在dealloc方法中release这个成员变量。

  1. -(void) dealloc
  2. {
  3. [objB release];
  4. [super dealloc];
  5. }

示例代码文件链接:http://files.cnblogs.com/VinceYuan/objective-c-memman.zip

转载于:https://www.cnblogs.com/Free-Thinker/p/4991639.html

Objective-C内存管理教程和原理剖析(三)相关推荐

  1. iPhone/Mac Objective-C内存管理教程和原理剖析

    版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有.欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com/,且必 ...

  2. iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式转

    版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有.欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com,且必须 ...

  3. Objective C内存管理之理解autorelease------面试题

    Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Aut ...

  4. ND4J/DL4J的内存管理:工作原理

    ND4J/DL4J的内存管理:工作原理 ND4J使用堆外内存存储N维数组NDArray,以便提升从本机代码(例如BLAS和CUDA库)使用NDArray时的性能. "堆外"意味着系 ...

  5. 【es】es 分布式一致性原理剖析(三)-Data篇

    1.概述 转载:Elasticsearch分布式一致性原理剖析(三)-Data篇 前言 "Elasticsearch分布式一致性原理剖析"系列将会对Elasticsearch的分布 ...

  6. Shiro系统权限管理、及原理剖析

    1.简介 常用的Java EE安全框架有shiro.spring security.shiro被应用非常广泛,可以集成cas,搭建单点登录系统.spring security则被认为比较重,应用没有s ...

  7. Swift之深入解析内存管理的底层原理

    一.Swift 内存管理 ① ARC 跟 OC 一样,Swift 也是采用基于引用计数的 ARC 内存管理方案(针对堆空间): Swift 的 ARC 中有三种引用: 强引用(strong refer ...

  8. iOS 内存管理机制与原理

    内存分区 内存一般分为五大区:栈区.堆区.常量区.全局区.代码区.如图 1.栈区 是由编译器自动分配并释放的,主要用来存储局部变量.函数的参数等,是一块连续的内存区域,遵循先进后出(FILO)原则.一 ...

  9. Elasticsearch分布式一致性原理剖析(三)-Data篇

    前言 "Elasticsearch分布式一致性原理剖析"系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式.原理以及其存在的问题等(基于6.2版本 ...

最新文章

  1. 不能执行已释放 script 的代码_[漏洞预警]CVE20190708远程桌面代码执行漏洞利用工具已放出...
  2. jdbc连接Oracle/MySQL数据库进行批量导入操作,如何提高效率???
  3. flink的TimeCharacteristic(转载)
  4. linux mmap 内存映射 mmap() vs read()/write()/lseek()
  5. 表达式目录树(Expression)
  6. codeforecs Gym 100286B Blind Walk
  7. rman report list crosscheck delete -rman常用命令。
  8. 如何清除图片下方出现几像素的空白间隙?
  9. oracle试图怎么使用,oracle 视图的介绍和使用
  10. linux内核驱动摄像头图片,详解linux 摄像头驱动编写
  11. 测试高中低音的软件6,分别用什么音乐来测试设备的高中低音。
  12. 封装0603和0805的区别
  13. JQuery插件Select2详解
  14. 大型国企用泛微OA,让会务管理有序,让会议开展高效
  15. C语言的进制转换以及算法实现
  16. UnicodeDecodeError: 'rawunicodeescape' codec can't decode bytes in position 80-81: truncated \UXXX
  17. 给定一个仅包含大小写字母和空格 ‘ ‘ 的字符串 s,
  18. 【kuangbin】简单搜索 - 13.非常可乐【BFS】
  19. Cisco路由器和交换机型号
  20. 旧电脑装什么系统最快_【老旧电脑装什么系统】老电脑装什么系统流畅_老旧电脑收藏...

热门文章

  1. python编写脚本教程_python编写一个会算账的脚本的示例代码
  2. 计算机辅助教学的开题报告,开题报告样例1(计算机辅助教学)(8页)-原创力文档...
  3. OpenCV-Python实战(番外篇)——利用增强现实制作美颜挂件,让你的照片与众不同
  4. while 循环java_Java做while循环
  5. jquery选择器_jQuery选择器
  6. C#使用SetWindowsHookEx时报错“类型的已垃圾回收委托进行了回调”
  7. ROS的学习(二十一)使用时间和TF
  8. 主流Java微服务框架有哪些?-开课吧
  9. 浅谈人工智能的工作原理
  10. C++是C语言演变过来的,为何不能代替C语言?