- alloc, copy, retain会把引用计数+1

- release会把引用计数-1

- 局部变量如果初始化时不是autorelease的,要及时调用release释放,并且赋值为nil否则引用仍然存在导致下次无法用nil做是否有值的判断

- 实例变量要在每次赋值时要先释放当前引用的对象再赋值,并retain一下保证引用计数为1

- 对于有retain参数的property,直接使用”.”赋值时系统会自动释放当前引用对象再赋值,并自动retain一下

- dealloc中要对所有实例变量调用release,对于有retain参数的property只需要调用self.theProperty = nil即可,系统会去做释放

- delegate的property通常设为assign,如果设为retain的话会有循环引用的问题,比如aView.delegate = self时会把self retain一下,在aView的dealloc中会把delegate release,但是由于self的引用永远不会小于1,所以导致aView和self的dealloc永远都不会被执行,都永远驻留内存造成泄露。所以如果要设为retain的话一定要确保不会造成循环引用问题。

- 在UIViewController中的viewDidUnload中要释放掉局部变量,调用release并设为nil,有时系统收到内存警告时会自动调用这个函数来释放一些内存空间

- 系统内存警告的回调中要释放掉内存中的缓存和其他可释放的东西,以免造成crash

- 使用UITableView时要把cell设置为重用的,并且要确保确实写得是重用的,有的人写完的结果相当于还是每次都重建cell,导致效率低下

- 使用UIScrollView时要自己控制释放掉目前不显示的内容,尤其是图片,考虑图片大小和浏览效果可以加载当前显示页两边的3-5页内容

- 图片需要做缓存,尤其是本地文件系统缓存,可以放到Library/Cache目录中,这个目录系统有专用的常量来获取,比如:

这里是一个小例子阐释前几条基本原则:

//创建一个局部变量view
UIView *view = [[UIView alloc] init]; // 赋值给实例变量theView
[theView release]; //先释放一下当前引用的变量
theView = [view retain]; //给实例变量赋值时需要retain一下 // 如果theView是一个有retain属性的property
self.theView = view; //不需要先释放,也不需要调用retain,系统会自动做,所以一定不能这样写self.view = [[UIView alloc] init];,            //这样的话创建的view会被retain两次,造成泄露,对于这种可以先创建一个局部变量,给self.view赋值后再释放 

[view release]; //要及时释放局部变量 - (void)dealloc{
//释放局部变量
[theView release]; //如果theView是一个有retain属性的property,也可以这样写
self.theView = nil; [super dealloc]; }

转载于:https://www.cnblogs.com/mohe/p/3301958.html

ios 内存管理 心得相关推荐

  1. 【Bugly干货分享】iOS内存管理:从MRC到ARC实践

    本文作者:王拥军 腾讯自选股高级开发工程师 Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创. 对于i ...

  2. iOS内存管理策略和实践

    来源:http://www.baidu.com/link?url=irojqCBbZKsY7b0L2EBPkuEkfJ9MQvUf8kuNWQUXkBLk5b22Jl5rjozKaJS3n78jCnS ...

  3. iOS内存管理(ARC,MRC)

    iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理 ...

  4. iOS内存管理系列之一:对象所有权与引用计数

    原文地址:[转]iOS内存管理系列之一:对象所有权与引用计数作者:anynot 内存管理是iPhone或iPad开发中最为重要的一部分.掌握好了内存管理,开发出的应用就能运行流畅:掌握不好,开发出的东 ...

  5. iOS内存管理机制解析

    软件运行时会分配和使用设备的内存资源,因此,在软件开发的过程中,需要进行内存管理,以保证高效.快速的分配内存,并且在适当的时候释放和回收内存资源. 一.Objective-C内存管理的对象 IOS开发 ...

  6. iOS内存管理——alloc/release/dealloc方法的GNUstep实现与Apple的实现

    关于阅读<Object-C高级编程-iOS与OS X多线程和内存管理>一书后的iOS内存管理系列思考 <关于iOS内存管理的规则思考> <iOS内存管理--alloc/r ...

  7. 终于明白那些年知其然而不知其所以然的iOS内存管理方式

    终于明白那些年知其然而不知其所以然的iOS内存管理方式 前言 从我开始学习iOS的时候,身边的朋友.网上的博客都告诉我iOS的内存管理是依靠引用计数的,然后说引用计数大于1则对象保存在内存的堆中而引用 ...

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

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

  9. iOS内存管理 —— 自动释放池和runloop

    iOS内存管理 -- 自动释放池和runloop 1. 自动释放池 1.1 自动释放池介绍 1.2 自动释放池底层原理 objc_autoreleasePoolPush autoreleaseNoPa ...

最新文章

  1. 前端 CSS层叠性 CSS选择器优先级
  2. Web开发模式(MVC设计模式)
  3. 关于Python的一些学习笔记(小白式笔记,持续更新)
  4. .NET中Redis安装部署及使用方法
  5. HDU 5938 2016CCPC杭州 F: Four Operations
  6. 2016,不能忽视的IBM闪存新思维下的新战略
  7. fins协议握手信号服务器响应,欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等...
  8. 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?
  9. whose引导的定语从句,先行词是复数形式,从句里谓语动词用单数还是复数?
  10. 机器学习:李航-统计学习方法-代码实现
  11. Axure 蚂蚁设计团队组件库 让交互稿美美搭
  12. bootstrap多层modal的相关问题
  13. php 后门代码_php后门程序演示
  14. IT人才外包的驻场外派流程是怎样的?
  15. WinZip 24中文版下载+安装教程
  16. QQ透明皮肤:多层算法 一键适配各种背景
  17. 软件工程——数据流图练习
  18. QT开发之旅一DS7400主机调试工具
  19. Android使用ExoPlayer播放音频实现报听写功能
  20. makefile--经典之作

热门文章

  1. 老男孩博客园杨海潮MySQL--MySQL机构逻辑2
  2. wdk1703+vs2015编译的诡异问题
  3. 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算...
  4. Docker热点文章链接 - 持续更新
  5. linux下Bash编程until语句及格式化硬盘分区等编写脚本(十)
  6. Java并发编程-ReentrantLock源码分析
  7. 用SD卡下载uboot、linux内核和文件系统
  8. CentOS命令行安装配置KVM详细教程
  9. 马来西亚热情拥抱阿里巴巴 马云倡议的eWTP首次落地海外
  10. python语言学习零基础教学视频_Python告白小白视频教程(零基础入门)