博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C内存管理教程和原理剖析(三)
阅读量:6151 次
发布时间:2019-06-21

本文共 836 字,大约阅读时间需要 2 分钟。

初学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.          ClassB *objB; 
  3. -(ClassB *) getObjB; 
  4. -(void) setObjB:(ClassB *) value; 
  5. @end 
  6.  
  7. @implementation ClassA 
  8. -(ClassB*) getObjB 
  9.          return objB; 
  10. -(void) setObjB:(ClassB*) value 
  11.          if (objB != value) 
  12.          { 
  13.                    [objB release]; 
  14.                    objB = [value retain]; 
  15.          } 

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

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

  1. -(void) dealloc 
  2.          [objB release]; 
  3.          [super dealloc]; 

示例代码文件链接:

转载地址:http://jrgya.baihongyu.com/

你可能感兴趣的文章
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
User implements HttpSessionBindingListener
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
前端第七天
查看>>