内存泄露和野指针

为什么要进行内存管理

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. 指针操作超越变量作用域
    不要返回指向栈内存的指针或引用,因为栈内存 在函数结束时会被释放
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 内存泄漏 用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用...
    Pitfalls阅读 5,107评论 0 0
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,001评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • —— Kurny 深山空穴起清风,梅花隐处落红尘。 一间草屋孤凭树,枝下悠锄乃素人。 (作于2016年8月18日。)
    Kurny91阅读 3,085评论 19 14
  • 他许你的海誓山盟蜜语甜言,我自己给自己海阔天空白云朵朵。 4月底的某天中午,小伙伴打电话来说5月机票便宜,要不要一...
    杜春阳阅读 1,288评论 0 0

友情链接更多精彩内容