博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective C内存管理进阶(一):实践准则
阅读量:6797 次
发布时间:2019-06-26

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

转自 
 
这个系列打算写一些我对Iphone开发内存管理的理解。是建立在读者对Objective C的内存管理已经有一定理解的基础上,内容将包括实践准则,autorelease原理剖析,内存泄露的调试等。如果您对Objective C内存管理不太了解,建议先读一下Vince Yuan的这个 。

在进行IPhone开发时, 内存管理是个相对比较难以理解的东西。Objective-C 使用了一种介于C#和C++之间的内存管理机制。C#是基于Mark-sweep的GC, C++基本上是程序员自己负责分配和释放。 Ojbective-C, 是程序员来负责Mark(通过Release, retain, alloc)计数, 系统来进行分配和释放。 下面是一些准则, 可以避免内存泄露和使用已释放的内存造成程序crash。

1)你必须为你自己创建的Object负责。 包括alloc,  newObject, mutableCopy 等, 或者是你调用过retain的object。 对于这些Object, 你必须调用release 或autorelease。

2)对于其它函数返回的Object, 你不能release它, 原则上应该由被调用的函数来负责。e.g. NSString str = [NSString stringWithFormat:].  你自己写的函数也最好遵循这个准则,谁申请,谁释放,而不要让调用者来释放。
3)如果你要在某个对象的property里存储另外一个对象, 你必须retain 或者copy 它, 避免它被别人release。
@property(retain)。。     这里的retain关键字会自动做这个事情。如果你自己声明set方 法就要手动做这个事情。
4)关于IPhone内存管理的 。 其中比较有用的包括尽量避免使用Autorelease,以及[UIImage imageNamed:],打开 .
5) weak reference.   如下图, Document 类中Page property 指向Page类的对象, page类中Parent property指向Document, 这样如果互相之间的retain count都是1的话,那么这两个object永远不会被Dealloc。 解决办法是把page.parent变为weak reference,也就是说, page.parent并不retain Document。  UITableView.datasource, notification observers, delegates, outline view items 等都是week reference。
     

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

你可能感兴趣的文章
第六章 嫉妒、欺骗、背叛
查看>>
【未解决】js对象字面量、eval()方法
查看>>
安装php加速器Zend guard loader出现无法加载,没有找到php5.dll 的错误
查看>>
关于OpenCV 3.1的搭建使用经验
查看>>
唯品会的订单分库分表实践总结以及关键步骤
查看>>
solaris 开启ftp服务 通过xftp登陆ftp服务器
查看>>
explorer.exe
查看>>
maven 发布项目到docker
查看>>
我的友情链接
查看>>
sed 详细用法
查看>>
保护你的/wp-admin/文件夹
查看>>
tk.mapper 通用 mapper 动态表名查询
查看>>
12个优秀的国外Material Design网站案例
查看>>
MYSQL添加用户、建表、权限
查看>>
java之抽象类
查看>>
[2]工欲善其事必先利其器-------UML中的几种常见关系(二)
查看>>
一些二进制问题的巧妙方法
查看>>
iOS开发 - 如何获取设备的总容量和可用容量 网络运营商 3g/wifi判断 手机型号
查看>>
【在他乡】好用,用好MindManager
查看>>
可能是Windows下最简单的Java环境安装指南
查看>>