美文网首页iOS知识点面试
内存泄露和野指针

内存泄露和野指针

作者: 我是好宝宝_6966 | 来源:发表于2018-08-29 16:53 被阅读0次

为什么要进行内存管理

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. 指针操作超越变量作用域
    不要返回指向栈内存的指针或引用,因为栈内存 在函数结束时会被释放

相关文章

  • iOS底层原理

    内存泄露内存泄露是指我们在开发过程中当栈中的指针消失以后,堆中的内存还存在的情况 野指针野指针指的是堆中的内存消失...

  • 内存泄露和野指针

    为什么要进行内存管理 iPhone手机的内存是有限的,目前最大内存是2G,当运行频繁多的app的时候,会占用大量的...

  • 内存管理

    一,堆和栈 二,空指针、野指针和僵尸对象、内存泄露 三,assign,weak,strong,copy 详解 四,...

  • 说说App卡的三个原因

    主线程阻塞了 线程太多了 内存泄露?野指针?

  • iOS基础知识总结

    1.内存泄露和野指针 2.为什么@property声明(NString,NSArray,NSDictionary)...

  • 内存泄露,野指针

    堆是动态分配内存的,并且可以分配使用很大的内存,使用不好会产生内存泄露。频繁地使用malloc和free会...

  • C++ 智能指针

    智能指针 传统指针存在的问题需要手动管理内存容易发生内存泄露(忘记释放,出现异常等)释放之后产生野指针 智能指针就...

  • 内存泄露 VS 野指针

    它们两个都是关于内存的操作: 内存的使用的正确逻辑:区分这个时候存在应用程序、系统两个之前的关系和区别,不是同一个...

  • FFmpeg开发--C语言回顾

    运行Hello World Shell运行Hello World程序: Shell运行Demo: 内存泄露与野指针...

  • 理解内存管理

    • 堆和栈 内存泄露、野指针 堆和栈是逻辑分区也是物理分区。Stack Overflow,堆栈溢出是一起溢出的。堆...

网友评论

    本文标题:内存泄露和野指针

    本文链接:https://www.haomeiwen.com/subject/nbohwftx.html