内存管理的一些小问题(面试常用)

原创 2015年11月21日 13:57:27

1.多人开发如何检查内存泄漏?

> 使用Analyze进行代码的静态分析;

> 尽量在ARC环境下进行多人开发。


2.MRC环境下怎么做单例模式?

基本步骤:

>声明一个单例对象的静态实例并初始化为nil;

>创建一个类的类工厂方法,当且仅当这个类的实例为nil时生成一个该类的实例;

>实现NSCopying协议,覆盖allocWithZone:方法,确保用户在直接分配和初始化对象时不会产生另一个对象;

>覆盖release、autorelease、retain、retainCount方法,以此确保单例的状态;

>在多线程环境中,注意使用@synchronized关键字或者GCD,确保单例的状态。


ARC环境下:

比MRC少了几个步骤:

>声明实例化对象,初始化为nil;

>重写allocWithZone方法;

>实现NSCopying协议,覆盖allocWithZone:方法;


3.block在ARC和MRC中的用法有什么区别?需要注意什么?

(使用block不能用self. ,也会持有对象,造成循环引用)

>在使用block前需要对block做判空处理(不判空直接使用,一旦指针为空直接崩溃);

>在block使用之后要对,block指针做赋空值处理,如果是MRC的编译环境下,要先release掉block对象。

将block赋值为空,是解掉循环引用的重要方法。(不能只在dealloc里面做赋空值操作,这样已经产生的循环引用不会被破坏掉)】

>使用方将self或成员变量加入block之前要先将self变为__weak

>在多线程环境下(block中的weakSelf有可能被析构的情况下),需要先将self转为strong指针,避免在运行到某个关键步骤时self对象被析构。

ARC环境下:

>使用__block修饰变量,

MRC环境下:

>使用__weak修饰变量,

>block如果作为成员参数,要将block从栈上拷贝到堆上。


4.什么情况下会发生内存泄漏和内存溢出?

使用完成后没有释放,对象一直占有内存。

内存泄漏堆积起来,无论多少内存迟早会被占光,最终会导致内存溢出。


5.自动释放池的底层实现

自动释放池以栈的形式实现:当一个新的释放池被创建时,会被添加到栈顶。当一个对象收到autoRelease消息时,他被添加到当前线程处于栈顶的自动释放池,当释放池呗回收时,它们从栈顶被删除,并且会给池子里所有对象发送一条release消息。



面试题中常见的内存分配问题汇总

最近在准备面试,面试职位为C++软件开发类型,虽然还没有与某公司签约,但是经过多次的面试经验及过程进行分享! 程序的内存分配问题是每个IT公司都会问道的一个问题!现就内存分配问题分享我的总结。 内存总...

C语言内存管理机制的一点小问题

先来一张高能的图: 这张图片上的结果是一个细心地小伙儿发现的。。嗯不如说是个疯狂的小伙儿。 第一行里指针a,b竟然有相同的值,看这结果是不是很像引用? 理论上来说要用指针是要给它分配内存空间...
  • Panda_m
  • Panda_m
  • 2014年12月17日 16:53
  • 611

C++ 内存管理的小问题--------危险的C++

C++ 内存管理的小问题--------危险的C++           今天看>十三章的智能指针部分,了解到通过引用计数可以解决悬垂指针问题,这个方案解决的是多个指针指向同一对象时何时...

腾讯实习生面试--内存管理方法

由于腾讯实习生面试的比较早,具体问题我也给忘了。但是我记得是一个关于操作系统内存分配方案的,当时关于操作系统之类的知识大部分都忘了。今天在这里对操作系统中内存管理这一块做一个总结。 1、内存管理的背景...

关于面试中的一二 ------------内存管理 持续更新

怎么保证MRC多人开发进行内存泄露的检查. 使用Analyze进行代码的静态分析 检测内存泄漏的方法:(leak,内存泄露)  (加分)为避免不必要的麻烦, 多人开发时尽量使用ARC(苹果会自动...

iOS开发学习手动内存管理暂时抛弃ARC以及retain/assign知识——iOS工程师面试必考内容

转载自:http://blog.csdn.net/weisubao/article/details/39956563 我们为什么需要内存管理?当使用内存达到40M和45M时候会发出警告,如果...

【IOS笔试面试】02-内存管理

1. 怎么保证多人开发进行内存泄露的检查. 1> 使用Analyze进行代码的静态分析 2> 为避免不必要的麻烦, 多人开发时尽量使用ARC   2.非自动内存管理情况下怎么做单例模式...

找工作笔试面试那些事儿(3)---内存管理那些事

作者:寒小阳 时间:2013年8月。 出处:http://blog.csdn.net/han_xiaoyang/article/details/10676931。 声明:版权所有,转载请注明出处...

面试总结------Java内存管理与多线程

面试总结——Java内存管理与多线程1. 什么是线程?什么是进程?同一进程下的线程共享线程:程序在执行过程中,能够执行程序代码的一个执行单元,一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之...

Java内存管理常见面试题

Java垃圾收集器与类的finalize()方法总结 1. 垃圾收集器的工作目标是回收已经无用的对象的内存空间,从而避免内存渗漏体的产生,节省内存资源,避免程序代码的崩溃。 2.垃圾收集器判断一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内存管理的一些小问题(面试常用)
举报原因:
原因补充:

(最多只允许输入30个字)