2016-10-26 16:39发布
下面关于Objective-C内存管理的描述错误的是A 当使用ARC来管理内存时,代码中不可以出现autoreleaseB autoreleasepool 在 drain 的时候会释放在其中分配的对象C 当使用ARC来管理内存时,在线程中大量分配对象而不用autoreleasepool则可能会造成内存泄露D 在使用ARC的项目中不能使用NSZone
= =。。网上看到的,参考答案为A.
我觉得选C来的~
不知道A错在哪里了?
你看的参考答案不对。ARC 下,不能使用 autorelease 进行编程,但是可以使用 @autoreleasepool。它的作用是降低内存占用。
@autoreleasepool
C的描述是对的,在遇到需要大量创建对象的地方使用autoreleasepool可以加快对象释放的速度。如果说A是错的,那只能是说明出题者想考你ARC的原理其实是编译器自动帮你在代码中加入autorelease等代码。其实在ARC的项目中写autorelease连编译都通不过,这样想得话A其实也是对的。不过既然其他3个都是对的,也只能选A了。
我来搞个笑 “难道你们没打开过 main.m?”
因为ARC是编译器特性,而不是iOS运行时特性,更不是其他语言中的垃圾收集器。所以这就意味这它只能处理在编译时就确定的内存管理,所用的机制就是引用计数。换句话来讲,他的内存释放不是强制的,比如内存相互引用,动态引用等会导致引用计数不会立刻置0,所以这个时候显式释放是有必要的。
最多设置5个标签!
付费偷看金额在0.1-10元之间
你看的参考答案不对。
ARC 下,不能使用 autorelease 进行编程,但是可以使用
@autoreleasepool
。它的作用是降低内存占用。C的描述是对的,在遇到需要大量创建对象的地方使用autoreleasepool可以加快对象释放的速度。
如果说A是错的,那只能是说明出题者想考你ARC的原理其实是编译器自动帮你在代码中加入autorelease等代码。其实在ARC的项目中写autorelease连编译都通不过,这样想得话A其实也是对的。
不过既然其他3个都是对的,也只能选A了。
我来搞个笑 “难道你们没打开过 main.m?”
因为ARC是编译器特性,而不是iOS运行时特性,更不是其他语言中的垃圾收集器。
所以这就意味这它只能处理在编译时就确定的内存管理,所用的机制就是引用计数。
换句话来讲,他的内存释放不是强制的,比如内存相互引用,动态引用等会导致引用计数不会立刻置0,所以这个时候显式释放是有必要的。
一周热门 更多>