美文网首页IOS面试专题
iOS面试:自动释放池如何工作?release和autorele

iOS面试:自动释放池如何工作?release和autorele

作者: 世玉茹花 | 来源:发表于2017-08-14 14:48 被阅读74次

release和autorelease区别:release只是把对象引用计数-1。autorelease实际上只是把release延迟调用了【autorelease会在对象真正使用结束时候才做引用计数-1】,系统只是把对象放入了autoreleasepool中,当pool释放时,该pool中所有对象就会被调用release。

autoreleasepool并不是程序退出时才将里面对象release。对于每一个runloop,系统会隐式的创建一个autoreleasepool构成一个像callstack一样的栈式结构,在runloop结束时,当前栈顶的release pool会被销毁,这个pool里面每个对象也会被release。

原理:NSAutoreleasepool实际上是个对象引用计数自动处理器。ARC中,系统自动帮我们嵌入.当pool释放时,该pool中的所有对象就会被调用release。

ARC年代,系统自动管理自己的autoreleasepool,runloop就是iOS中的消息循环机制,当一个runloop结束时系统才会清理掉被autorelease处理过的对象。。

所以,如果循环创建了很多临时对象,可以在循环中使用自动释放池block,下次迭代前处理这些对象,再循环中使用自动释放池block,有助于进减少内存占用。

for (NSURL *url in urls) {

@autoreleasepool {

NSError *error;

NSString *fileContents = [NSString stringWithContentsOfURL:url

encoding:NSUTF8StringEncoding

error:&error];

}

}每个@autoreleasepool结束时,里面的临时变量就会回收,内存使用更加合理。

autoreleasepool何时释放:(1)手动释放autoreleasepool(2)runloop结束后自动释放。

手动创建:NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init;

ARC下,不能调用autorelease,可以使用@autoreleasepool{}

相关文章

  • iOS面试:自动释放池如何工作?release和autorele

    release和autorelease区别:release只是把对象引用计数-1。autorelease实际上只是...

  • 自动释放池-AutoReleasePool

    自动释放池-AutoReleasePool 自动释放池是OC中的一种内存自动回收机制,它可以将加入Autorele...

  • OC底层原理探索-AutoReleasePool

    AutoReleasePool 自动释放池 自动释放池是OC中的一种内存自动回收机制,它可以将加入Autorele...

  • iOS AutoReleasePool 自动释放池以及RunLo

    AutoReleasePool 自动释放池 自动释放池 -> 内存自动回收机制 -> 变量release的时机延...

  • 第一季:基础

    参考文章来源 腾讯社招iOS面试记录 1.谈谈你对自动释放池的理解, 1.自动释放池是OC提供的一种自动回收机制,...

  • 7-ARC&Block

    1.autorelease 自动释放池作用:当自动释放池被销毁时,会对池子里面的所有对象做一次release操作;...

  • autoreleasepool 来龙去脉

    一、自动释放池建立1、 OC 正常写法 2、通过clang 解析后,会得到 3、有意思的来了, @autorele...

  • iOS面试总结

    1.自动释放池是如何工作的? 自动释放池是NSAutorelease类的一个实例,当像对象发送autoreleas...

  • iOS面试题:NSAutoreleasePool 是怎么工作的?

    原文:iOS面试题大全 自动释放池以栈的形式实现:当你创建一个新的自动释放池时,它将被添加到栈顶。当一个对象收到发...

  • RunLoop笔记

    RunLoop是iOS和OSX中基本的概念,掌握RunLoop,能了解到苹果是如何利用RunLoop实现自动释放池...

网友评论

    本文标题:iOS面试:自动释放池如何工作?release和autorele

    本文链接:https://www.haomeiwen.com/subject/mreurxtx.html