ios - Objective-C内存管理面试题一道

查看:262
本文介绍了ios - Objective-C内存管理面试题一道的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

下面关于Objective-C内存管理的描述错误的是
A 当使用ARC来管理内存时,代码中不可以出现autorelease
B autoreleasepool 在 drain 的时候会释放在其中分配的对象
C 当使用ARC来管理内存时,在线程中大量分配对象而不用autoreleasepool则可能会造成内存泄露
D 在使用ARC的项目中不能使用NSZone

= =。。
网上看到的,参考答案为A.

我觉得选C来的~

不知道A错在哪里了?

解决方案

C的描述是对的,在遇到需要大量创建对象的地方使用autoreleasepool可以加快对象释放的速度。
如果说A是错的,那只能是说明出题者想考你ARC的原理其实是编译器自动帮你在代码中加入autorelease等代码。其实在ARC的项目中写autorelease连编译都通不过,这样想得话A其实也是对的。
不过既然其他3个都是对的,也只能选A了。

==========更新==========
希望踩我答案的人可以在我这个回答的评论区告诉我什么地方错了。
即使我只大概推测了为什么A不对,但是我明确回答了楼主C是对的。
至于C为什么是对的,可以去看官方文档:autoreleasepool

If you spawn a secondary thread.
You must create your own autorelease pool block as soon as the thread begins executing; otherwise, your application will leak objects. (See Autorelease Pool Blocks and Threads for details.)

==========再次更新==========
上面的文档是关于MRC的,ARC中在线程大量创建对象需不需要autorelease pool可以看这个回答:
http://stackoverflow.com/ques...

这篇关于ios - Objective-C内存管理面试题一道的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆