Objective-C内存管理教程和原理剖析(三)
初学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一样):
- @interface ClassA : NSObject
- {
- ClassB *objB;
- }
- -(ClassB *) getObjB;
- -(void) setObjB:(ClassB *) value;
- @end
- @implementation ClassA
- -(ClassB*) getObjB
- {
- return objB;
- }
- -(void) setObjB:(ClassB*) value
- {
- if (objB != value)
- {
- [objB release];
- objB = [value retain];
- }
- }
在setObjB中,如果新设定的值和原值不同的话,必须要把原值对象release一次,这样才能保证retain count是正确的。
由于我们在class内部retain了一次(虽然是默认实现的),所以我们要在dealloc方法中release这个成员变量。
- -(void) dealloc
- {
- [objB release];
- [super dealloc];
- }
示例代码文件链接:http://files.cnblogs.com/VinceYuan/objective-c-memman.zip
转载于:https://www.cnblogs.com/Free-Thinker/p/4991639.html
Objective-C内存管理教程和原理剖析(三)相关推荐
- iPhone/Mac Objective-C内存管理教程和原理剖析
版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有.欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com/,且必 ...
- iPhone/Mac Objective-C内存管理教程和原理剖析(二)口诀与范式转
版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有.欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com,且必须 ...
- Objective C内存管理之理解autorelease------面试题
Objective C内存管理之理解autorelease Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Aut ...
- ND4J/DL4J的内存管理:工作原理
ND4J/DL4J的内存管理:工作原理 ND4J使用堆外内存存储N维数组NDArray,以便提升从本机代码(例如BLAS和CUDA库)使用NDArray时的性能. "堆外"意味着系 ...
- 【es】es 分布式一致性原理剖析(三)-Data篇
1.概述 转载:Elasticsearch分布式一致性原理剖析(三)-Data篇 前言 "Elasticsearch分布式一致性原理剖析"系列将会对Elasticsearch的分布 ...
- Shiro系统权限管理、及原理剖析
1.简介 常用的Java EE安全框架有shiro.spring security.shiro被应用非常广泛,可以集成cas,搭建单点登录系统.spring security则被认为比较重,应用没有s ...
- Swift之深入解析内存管理的底层原理
一.Swift 内存管理 ① ARC 跟 OC 一样,Swift 也是采用基于引用计数的 ARC 内存管理方案(针对堆空间): Swift 的 ARC 中有三种引用: 强引用(strong refer ...
- iOS 内存管理机制与原理
内存分区 内存一般分为五大区:栈区.堆区.常量区.全局区.代码区.如图 1.栈区 是由编译器自动分配并释放的,主要用来存储局部变量.函数的参数等,是一块连续的内存区域,遵循先进后出(FILO)原则.一 ...
- Elasticsearch分布式一致性原理剖析(三)-Data篇
前言 "Elasticsearch分布式一致性原理剖析"系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式.原理以及其存在的问题等(基于6.2版本 ...
最新文章
- 不能执行已释放 script 的代码_[漏洞预警]CVE20190708远程桌面代码执行漏洞利用工具已放出...
- jdbc连接Oracle/MySQL数据库进行批量导入操作,如何提高效率???
- flink的TimeCharacteristic(转载)
- linux mmap 内存映射 mmap() vs read()/write()/lseek()
- 表达式目录树(Expression)
- codeforecs Gym 100286B 	Blind Walk
- rman report list crosscheck delete -rman常用命令。
- 如何清除图片下方出现几像素的空白间隙?
- oracle试图怎么使用,oracle 视图的介绍和使用
- linux内核驱动摄像头图片,详解linux 摄像头驱动编写
- 测试高中低音的软件6,分别用什么音乐来测试设备的高中低音。
- 封装0603和0805的区别
- JQuery插件Select2详解
- 大型国企用泛微OA,让会务管理有序,让会议开展高效
- C语言的进制转换以及算法实现
- UnicodeDecodeError: 'rawunicodeescape' codec can't decode bytes in position 80-81: truncated \UXXX
- 给定一个仅包含大小写字母和空格 ‘ ‘ 的字符串 s,
- 【kuangbin】简单搜索 - 13.非常可乐【BFS】
- Cisco路由器和交换机型号
- 旧电脑装什么系统最快_【老旧电脑装什么系统】老电脑装什么系统流畅_老旧电脑收藏...
热门文章
- python编写脚本教程_python编写一个会算账的脚本的示例代码
- 计算机辅助教学的开题报告,开题报告样例1(计算机辅助教学)(8页)-原创力文档...
- OpenCV-Python实战(番外篇)——利用增强现实制作美颜挂件,让你的照片与众不同
- while 循环java_Java做while循环
- jquery选择器_jQuery选择器
- C#使用SetWindowsHookEx时报错“类型的已垃圾回收委托进行了回调”
- ROS的学习(二十一)使用时间和TF
- 主流Java微服务框架有哪些?-开课吧
- 浅谈人工智能的工作原理
- C++是C语言演变过来的,为何不能代替C语言?