ios 内存管理 心得
- 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 内存管理 心得相关推荐
- 【Bugly干货分享】iOS内存管理:从MRC到ARC实践
本文作者:王拥军 腾讯自选股高级开发工程师 Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创. 对于i ...
- iOS内存管理策略和实践
来源:http://www.baidu.com/link?url=irojqCBbZKsY7b0L2EBPkuEkfJ9MQvUf8kuNWQUXkBLk5b22Jl5rjozKaJS3n78jCnS ...
- iOS内存管理(ARC,MRC)
iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理 ...
- iOS内存管理系列之一:对象所有权与引用计数
原文地址:[转]iOS内存管理系列之一:对象所有权与引用计数作者:anynot 内存管理是iPhone或iPad开发中最为重要的一部分.掌握好了内存管理,开发出的应用就能运行流畅:掌握不好,开发出的东 ...
- iOS内存管理机制解析
软件运行时会分配和使用设备的内存资源,因此,在软件开发的过程中,需要进行内存管理,以保证高效.快速的分配内存,并且在适当的时候释放和回收内存资源. 一.Objective-C内存管理的对象 IOS开发 ...
- iOS内存管理——alloc/release/dealloc方法的GNUstep实现与Apple的实现
关于阅读<Object-C高级编程-iOS与OS X多线程和内存管理>一书后的iOS内存管理系列思考 <关于iOS内存管理的规则思考> <iOS内存管理--alloc/r ...
- 终于明白那些年知其然而不知其所以然的iOS内存管理方式
终于明白那些年知其然而不知其所以然的iOS内存管理方式 前言 从我开始学习iOS的时候,身边的朋友.网上的博客都告诉我iOS的内存管理是依靠引用计数的,然后说引用计数大于1则对象保存在内存的堆中而引用 ...
- iOS 开发:彻底理解 iOS 内存管理(MRC 篇)
本文首发于我的个人博客:「程序员充电站」 文章链接:「传送门」 本文更新时间:2021年08月17日17:11:59 本文是 「iOS 开发:彻底理解 iOS 内存管理」系列的「MRC 篇」. 用来对 ...
- iOS内存管理 —— 自动释放池和runloop
iOS内存管理 -- 自动释放池和runloop 1. 自动释放池 1.1 自动释放池介绍 1.2 自动释放池底层原理 objc_autoreleasePoolPush autoreleaseNoPa ...
最新文章
- 前端 CSS层叠性 CSS选择器优先级
- Web开发模式(MVC设计模式)
- 关于Python的一些学习笔记(小白式笔记,持续更新)
- .NET中Redis安装部署及使用方法
- HDU 5938 2016CCPC杭州 F: Four Operations
- 2016,不能忽视的IBM闪存新思维下的新战略
- fins协议握手信号服务器响应,欧姆龙FinsTCP与FinsUDP协议解析 —— 利用Wireshark对报文逐字节进行解析详细解析附含报文模拟器等...
- 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?
- whose引导的定语从句,先行词是复数形式,从句里谓语动词用单数还是复数?
- 机器学习:李航-统计学习方法-代码实现
- Axure 蚂蚁设计团队组件库 让交互稿美美搭
- bootstrap多层modal的相关问题
- php 后门代码_php后门程序演示
- IT人才外包的驻场外派流程是怎样的?
- WinZip 24中文版下载+安装教程
- QQ透明皮肤:多层算法 一键适配各种背景
- 软件工程——数据流图练习
- QT开发之旅一DS7400主机调试工具
- Android使用ExoPlayer播放音频实现报听写功能
- makefile--经典之作
热门文章
- 老男孩博客园杨海潮MySQL--MySQL机构逻辑2
- wdk1703+vs2015编译的诡异问题
- 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算...
- Docker热点文章链接 - 持续更新
- linux下Bash编程until语句及格式化硬盘分区等编写脚本(十)
- Java并发编程-ReentrantLock源码分析
- 用SD卡下载uboot、linux内核和文件系统
- CentOS命令行安装配置KVM详细教程
- 马来西亚热情拥抱阿里巴巴 马云倡议的eWTP首次落地海外
- python语言学习零基础教学视频_Python告白小白视频教程(零基础入门)