美文网首页
内存泄漏理解

内存泄漏理解

作者: 宙斯YY | 来源:发表于2017-11-20 17:50 被阅读12次

1.简单理解

内存泄漏指的是堆内存泄漏,栈不会发生内存泄漏,只会发生栈溢出(StackOverFlow)。
简单一个创建对象的方法:

A *a = [[A alloc]init];

a指针存在于栈上,a所指向的A的对象存在于堆上。
a为nil时,A的对象没释放掉,那么就发生内存泄漏了。
比如iOS很多C框架的东西(OC有自动引用机制,不需要手动释放)

{
//dtimer指针在栈空间,dispatch_source_t对象在堆空间
dispatch_source_t dtimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
    dispatch_source_set_timer(dtimer, DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC, 1 * NSEC_PER_SEC);
    dispatch_source_set_event_handler(dtimer, ^{
        
        sum--;
        
        NSLog(@"sum:%d",sum);
    });
    
 //释放dtimer指向的堆空间
    dispatch_resume(dtimer);
//如果不释放,函数执行完毕,dtimer变量就没了,造成内存泄漏。
}

如果A对象释放了,a没有回收,那么就是野指针。

{
while(true)
{
A *a = [[A alloc]init];
}
}

这样就会造成StackOverFlow。

相关文章

  • 浅析 NSTimer 和 CADisplayLink 内存泄漏

    内存泄漏原因 谈论 NSTimer & CADisplayLink 内存泄漏,要理解 NSTimer & CADi...

  • 内存泄漏理解

    1.简单理解 内存泄漏指的是堆内存泄漏,栈不会发生内存泄漏,只会发生栈溢出(StackOverFlow)。简单一个...

  • 优化

    1.内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法? 内存溢出通俗理解就是软件(应用)运行需...

  • Android性能优化之内存泄漏

    内存泄漏:内存单元使用完成后未释放,未回收。理解强弱引用和gc垃圾回收机制后,会更好的理解内存泄漏问题。 在目前的...

  • Android 内存泄漏和OOM分析(一)

    这段时间在研究如何处理内存泄漏问题和防止OOM(内存溢出) 首先是内存泄漏:(这个是摘抄,加入了自己的理解) 说完...

  • 【Android测试】内存泄漏检测 LeakCanary

    什么是内存泄漏和内存溢出?内存泄漏有什么危害?LeakCanary检测内存泄漏? 内存泄漏(Memory Leak...

  • 转:Android内存泄漏总结

    Android内存泄漏相关的文章有很多,在此结合自己的理解进行总结。 一、简介 内存泄漏:无用的对象没有被及时释放...

  • Android内存泄漏总结

    Android内存泄漏相关的文章有很多,在此结合自己的理解进行总结。 一、简介 内存泄漏:无用的对象没有被及时释放...

  • Android性能优化之内存泄漏排查

    1.内存泄漏 字面理解:内存泄漏出去了?真正含义:没有用的内存释放不掉。 2.代码演示 通过demo代码,记录Me...

  • Android性能优化之内存泄漏排查

    1.内存泄漏 字面理解:内存泄漏出去了?真正含义:没有用的内存释放不掉。 2.代码演示 通过demo代码,记录Me...

网友评论

      本文标题:内存泄漏理解

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