大家看看下面的区别:

NSString * sushiString = [NSString stringWithFormat:@"%d: %@", indexPath.row, sushiName];
NSString * sushiString = [[[NSString alloc] initWithFormat:@"%d: %@", indexPath.row, sushiName] autorelease];

下面是 子龙山人叫给方法:

一、如果一个方法以init或者copy开头,那么返回给你的对象的引用计数是1,并且这不是一个autorelease的对象。换句话说,你调用这些方法的话,你就对返回的对象负责,你再用完之后必须手动调用release来释放内存。

二、如果一个方法不是以init或者copy开头的话,那么返回的对象引用计数为1,但是,这是一个autorelease对象。换句话说,你现在可以放心使用此对象,用完之后它会自动释放内存。但是,如果你想在其它地方使用它(比如换个函数),那么,这时,你就需要手动retain它了。

引用计数总结:

  • 当你调用alloc/init的时候,你得到一个引用计数是1的对象。
  • 当你用完这个对象之后,你要对它调用release消息,使其引用计数为0,这样它的内存才会被释放掉。
  • 当你调用一个方法,它不是以init或者copy开头的,这时,返回给你的对象是autorelease的,它是一种在将来某个时刻会自动被释放的对象。(这里我也要提醒大家一句,比如你在写一个函数,它的名字是xxx,没有以init或者copy开头,那么记得你返回的对象一定要是autorelease的,否则,别人在使用你这个函数的时候就会把它当作是autorelease的,那么他就不会release它,这样就会造成内存泄漏,千万要切记!!!)
  • 如果你想继续使用autorelease对象,那么你就要给它放送一个retain消息。
  • 如果你使用alloc/init方法创建了一个对象,但是你想让它自己在出了runLoop之后被自动释放的话,那么你可以在alloc/init之后再调用autorelease。这也是一种见得比较多的写法了。比如,cocos2d里面调用[xxx node]的时候,就等于[[[xxx alloc] init]autorelease].

iPad/iPhone内存管理五之如何确定对象返回的值是autorelease相关推荐

  1. ipad/iphone内存管理一

    在我们iPhone/iPad项目中,程序会无缘无故地crash!这让我们非常的苦恼!现在我结合网上的一些资料,并根据自己的理解,和大家一起探讨内存管理这方面的知识.大家有什么不理解的可以直接给我留言. ...

  2. iPad/iPhone内存管理四之viewDidUnload/dealloc详细解说

    在进行内存管理时,我们必须要知道这两者的区别时什么. viewDidUnload是在程序接到内存警告的时候调用的,在这时候,我们可以把我们不需要的东西去掉或者让他等于nil. dealloc是在计数等 ...

  3. ipad/iphone内存管理二

    本次主要讲解的是 :autorelease // // main.m // MemoryManagement // // Created by b126 on 12-4-23. // Copyrigh ...

  4. ipad/iphone内存管理三之NoAutorelease和Autorelease详细解说

    相信大家对自动释放和手动释放疑惑很大,废话少说,先上代码: // // main.m // MemoryManagement // // Created by b126 on 12-4-23. // ...

  5. iPhone内存管理详细解说(二)

    继上一篇之后,再来讲述iPhone内存管理的细节. 四:动态内存管理 第四节就内容实质来说跟第三节的object的拥有和丢弃政策是一样的,不过是从以代码为引导的动态形式讲述.所以你会在这一节看到许多代 ...

  6. iphone内存管理

    http://hi.baidu.com/spopavenvldiqyr/item/c8d620b6282c4d4abb0e122a iphone内存管理(一) BY 洋葱头 http://hi.bai ...

  7. iPhone内存管理详细解说(一)

    iPhone内存管理详细解说系列转载来源:http://keywind.me/blog/2011/05/07/iphonenei-cun-guan-li-xiang-xi-jie-shuo-yi/ 感 ...

  8. iphone内存管理(一)

    内存管理在iphone中一直是一个热点话题.通过一段时间的总结我准备与大家分享一下我对内存管理的一点认识和经验. 开始之前先给大家分享一些重要的信息 1.Iphone 3g有128M的内存.但是至少有 ...

  9. iphone内存管理(二)

    (2)尽量避免使用autorelease 虽然autorelease非常简单有用,但是在iphone上一定要谨慎使用,毕竟iphone内存相当有限.autorelease可能会导致直接的隐型内存泄露. ...

最新文章

  1. 又一所“双一流”清退超33名博士生!今年已有超1300名硕博研究生被清退
  2. 线性回归api初步使用
  3. 对称加密和非对称加密介绍和区别
  4. 2021年古蔺高考成绩查询,古蔺中学2021录取分数线
  5. 全球最大的AI创意梦工厂!2019中国高校计算机大赛-人工智能创意赛开始报名啦!...
  6. EXCEL中显示年月日时分秒
  7. 如何提升网站的性能?
  8. Json-server 创建模拟API服务器
  9. mysql workbench 6.2.3 linux_MySQL Workbench 6.2.1 BETA 发布
  10. 快速学习使用springmvc、strust2、strust1以及它们的对比
  11. 【Java】辨析JUnit4中的@AfterClass、@BeforeClass、@after、@before
  12. Java 8 Map新增方法
  13. spring cloud微服务_面试败给微服务?别怕,我带你一起手撕Dubbo,SpringBoot与Cloud...
  14. 学习总结——工作中的性能测试完整过程
  15. mysql卸载后重装不_mysql卸载无法重装怎么办?
  16. 初入神经网络剪枝量化5(大白话)
  17. Primeng CascadeSelect UI显示BUG解决方案
  18. [游戏数据表]泰拉瑞亚Terraria 全物品属性表
  19. Python基础(3)——北京市地铁买票问题(思维练习题)
  20. Elang 学习笔记(二)

热门文章

  1. 干货分享 | 用Pyecharts绘制20钟不同风格的炫酷交互式图表,建议收藏
  2. j2cache入门使用
  3. AxureRP(中英文版)——初识Axure(一)
  4. excel 获取股票价格_股票价格的Excel点图
  5. 【读书笔记】——【学习之道】《如何学习:用更短的时间达到更加效果和更好成绩》
  6. U3D游戏开发工程师正确入行姿势指南
  7. 《山本耀司》- 我不烦你,请你也不要来烦我
  8. 【蓝桥备赛冲刺】2022年第十三届省赛模拟题题解C/C++
  9. msvcr120.dll WIN7 64位/32位丢失怎么办
  10. 自制USB转串口TTL(ch340)