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

原创 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消息。



版权声明:

相关文章推荐

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

七、内存管理        在写C/C++程序的时候,最头疼的部分一定包括内存管理,一提到内存管理总是提心吊胆,但是又不可避免地常常会遇到,而这块的知识也是公司招聘的一个评价方面,能够很好地体现笔试...

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

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

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

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

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

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

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

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

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

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

内存管理面试题

企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。...

[面试时]如何讲清楚objective-c内存管理

一、概论对C++程序员来说,使用指针最蛋疼的就是内存管理,为了避免卷进繁琐的管理内存保证不会内存泄露,我通常尽量不使用指针。但是在objective-c中,所有的变量都是指针,那么你就不得不考虑下如何...

C/C++ 笔试面试(3)——内存管理GetMemory

1.关于动态申请内存的问题 出现率极高 程序的局部变量存在于(栈)中 程序的全局变量存在于(静态存储区)中 程序动态申请的数据存在于(堆)中 [...

笔试面试那件小事(内存管理)

1->内存分配方式: 内存分配方式
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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