内存泄露和野指针

为什么要进行内存管理

iPhone手机的内存是有限的,目前最大内存是2G,当运行频繁多的app的时候,会占用大量的内存,当我们的App占用的内存大于40M的时候,ios系统会发出警告,当超过45M的时候系统会发出第二次警告,当占用内存超过120M的时候,App会闪退,所以我们需要对内存空间进行一个合理的管理,用以保证我们的App能够流畅的运行

内存泄漏

  • 定义:程序中已动态分配的堆内存由于某种原因,程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果
  • 造成内存泄漏的原因有两点:对象没有被释放、循环引用
  1. AFNetworking未创建成单例使用
  2. Block循环引用:对象之间引用的闭环出现
  3. delegate循环引用
  4. NSTimer循环引用
  5. 非OC对象内存处理
  6. 地图类处理
  7. 大次数循环内存暴涨问题

野指针

  • 定义:如果内存已经释放,而指针还在引用原始内存,这样的指针就称为野指针,也称作迷途指针。野指针不是nil指针,是指向”垃圾”内存(不可用内存)的指针
  • 野指针产生原因:
  1. 指针变量未初始化
    任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。所以指针变量在创建的同时应当被初始化,要么将指针置为NULL,要么让它指向合法的内存
  2. 指针释放后未置空
    指针在free或delete后未赋值NULL,此时指针指向的就是“垃圾”内存
  3. 指针操作超越变量作用域
    不要返回指向栈内存的指针或引用,因为栈内存 在函数结束时会被释放

你可能感兴趣的:(内存泄露和野指针)