栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > iOS面试题

iOS autoreleasepool自动释放池相关面试题

iOS面试题 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

问答

  • 自动释放池的作用是什么?
    • 延迟释放
  • 那些对象会延迟释放?
    • 所有用类方法实例化的对象都是延迟释放的
  • 对象何时被销毁?
    • 所有延迟释放的对象在超出作用域之后会被添加到最新创建的自动释放池中,但是不会被立即销毁,当自动释放池被销毁时,会向池中所有对象发送release消息,释放所有延迟释放的对象
  • 自动释放池何时被销毁?

示意图


2500.tm

自动释放池在ARC中工作吗?

    • 工作,编译器在编译时会根据代码添加retain、release、autorelease

面试题

题目

  • 以下代码是否有问题,如果有该如何修正?

题目

{% highlight objective-c %} int largeNo = 2 * 1024 * 1024; for (int i = 0;i < largeNo;i++){ NSString *str = [NSString stringWithFormat:@”Hello”]; str = [str uppercaseString]; str = [str stringByAppendingString:@” World”]; } {% endhighlight %}

答案

  • 每一次都会实例化新的str,超出作用域之后会被添加到自动释放池中,如果循环次数很多,会在一次循环之后把自动释放池耗尽

解决

{% highlight objective-c %} int largeNo = 2 * 1024 * 1024; @autoreleasepool { // 放在外面,保证循环之后释放循环中的自动释放对象 for (int i = 0;i < largeNo;i++){ //@autoreleasepool { // 放在内部,每一次循环之后,都倾倒一次自动释放池,内存管理时最好的,但性能不好 NSString *str = [NSString stringWithFormat:@”Hello”]; str = [str uppercaseString]; str = [str stringByAppendingString:@” World”]; //} } } {% endhighlight %}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号