为什么要进行内存管理
iPhone手机的内存是有限的,目前最大内存是2G,当运行频繁多的app的时候,会占用大量的内存,当我们的App占用的内存大于40M的时候,ios系统会发出警告,当超过45M的时候系统会发出第二次警告,当占用内存超过120M的时候,App会闪退,所以我们需要对内存空间进行一个合理的管理,用以保证我们的App能够流畅的运行
内存泄漏
- 定义:程序中已动态分配的堆内存由于某种原因,程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
- 造成内存泄漏的原因有两点:对象没有被释放、循环引用
- AFNetworking未创建成单例使用
- Block循环引用:对象之间引用的闭环出现
- delegate循环引用
- NSTimer循环引用
- 非OC对象内存处理
- 地图类处理
- 大次数循环内存暴涨问题
野指针
- 定义:如果内存已经释放,而指针还在引用原始内存,这样的指针就称为野指针,也称作迷途指针。野指针不是nil指针,是指向”垃圾”内存(不可用内存)的指针
- 野指针产生原因:
- 指针变量未初始化
任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。所以指针变量在创建的同时应当被初始化,要么将指针置为NULL,要么让它指向合法的内存 - 指针释放后未置空
指针在free或delete后未赋值NULL,此时指针指向的就是“垃圾”内存 - 指针操作超越变量作用域
不要返回指向栈内存的指针或引用,因为栈内存 在函数结束时会被释放