内存泄漏理解

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。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,028评论 1 16
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,239评论 30 472
  • JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...
    光剑书架上的书阅读 2,668评论 2 26
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,084评论 0 13
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,028评论 0 7