原文摘自:http://www.cnblogs.com/jifsu/archive/2011/09/09/2172863.html

一个方法,返回一个NSString对象,在事件中调用方法.并尝试release 方法返回的NSString对象.

-(NSString*) createNewString{
    //情况1
    return [[[NSString alloc] initWithFormat:@"%@",@"1223344"] autorelease];
   //情况2
    return [[[NSString alloc] initWithString:@"1223344"] autorelease];
   // 情况3
   return @"1223344";
}
 
//调用方法,在事件中
- (IBAction)TouchDown:(id)sender {
   NSString* str = [self  createNewString];
    NSLog(@"输出1 , count : %d" , [str retainCount]);
   [str release];
    NSLog(@"输出2 , count : %d" , [str retainCount]);
}

情况1 :

2011-09-08 21:33:38.817 AutoRelease[718:b303] 输出1 count : 1
2011-09-08 21:33:38.819 AutoRelease[718:b303] *** -[CFString retainCount]: message sent to deallocated instance 0x4e50c60

此时xcode断点停留在  输出2... 本来以为是输出2抛错. 理解为:  一个被回收的对象,不能执行方法retainCount . (单纯被回收 和 nil 是否有区别下次学习)

注释 输出2

结果为 :

2011-09-08 21:35:02.690 AutoRelease[745:b303] 输出1 count : 1
2011-09-08 21:35:02.692 AutoRelease[745:b303] *** -[CFString release]: message sent to deallocated instance 0x6895940

断点已经跑到main方法中去了. 此时确定为 [str release]; 方法抛错.  理解为:   对于一个 autorelease 的对象.不能手工进行 release操作.

修改一下调用方法:

- (IBAction)TouchDown:(id)sender {   NSString* str = [[self  createNewString] retain];    NSLog(@"输出1 count : %d" , [str retainCount]);   [str release];    NSLog(@"输出2 count : %d" , [str retainCount]);}

此时方法执行通过,无异常.输出为:

2011-09-08 21:40:42.029 AutoRelease[804:b303] 输出1 count : 2
2011-09-08 21:40:42.030 AutoRelease[804:b303] 输出2 count : 1

理解为: 当你需要操作 一个被autorelease的对象时. 可以首先 retain 他,然后在不在需要他的时候,release他  .  (这个是对象所有权的问题)  ..  retain == 计数器+1

----------------------------------- ----------------------------------- ----------------------------------- -----------------------------------

情况2 , 情况 3 :  方法  在修改前 和修改后2种代码下,都能运行过去.

输出都为:

2011-09-08 21:49:16.993 AutoRelease[864:b303] 输出1 count : 2147483647
2011-09-08 21:49:16.995 AutoRelease[864:b303] 输出2 count : 2147483647

理解为:  initWithString:@"1223344" ,创建了一个 常量 字符串.并被系统限定为不可release和retain的对象. 有点类似 苹果推荐的单例模式

注:  2147483647  是  UINT_MAX 的值

如果方法返回  return [[[NSString alloc] init]  stringByAppendingString:@"Hello World!"];

这个里面会存在内存泄露吗??? 继续研究....

可以参考的:http://stackoverflow.com/questions/1390334/nsstring-retain-count

转载于:https://www.cnblogs.com/85538649/archive/2011/11/15/2249849.html

[转载] iphone 很有意思的NSString 和 Autorelease相关推荐

  1. 一个很有意思的问题: 揭示了计算机程序问题的一般处理思路

    2019独角兽企业重金招聘Python工程师标准>>> 一个很有意思的问题: 揭示了计算机程序问题的一般处理思路 === 问题标题: 如何统计汉字的字数? 问题内容: 我想统计: & ...

  2. Java异常处理机制很有意思

    版权声明:欢迎转载,请注明沉默王二原创. https://blog.csdn.net/qing_gee/article/details/43015379 前言:在网络上看到一篇<深入理解Java ...

  3. 00003-回文数的判定-leetcode-解法不唯一,1.reverse最简单,2.数学方法很有意思

    回文数的判定 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-number 著作权归领扣网络所有.商业转载请联系官方授权, ...

  4. 今天看了ning的介绍,很有意思

    今天看了ning的介绍,很有意思.多去看看,那里有很多的创意. 还有个有意思的想法,首页全是图片,或者字,点击最多的最大,形成有趣的结构 转载于:https://www.cnblogs.com/liu ...

  5. 杭州有什么「鲜为人知但很有意思」的景点?

    杭州有什么「鲜为人知但很有意思」的景点? 杭州有什么「鲜为人知但很有意思」的景点? posted on 2016-08-29 13:06 lexus 阅读(...) 评论(...) 编辑 收藏 转载于 ...

  6. 很有意思的猜字谜对联

    在书上看到一个很有意思的猜字谜对联,大家不妨猜猜看 上联: 黑不是,白不是,红黄更不是,和狐狸猫狗彷佛,既非家畜,又非野兽 下联: 诗也有,词也有,论语上也有,对东西南北模糊,虽是短品,却是妙文 转载 ...

  7. 7个小众却很有意思的工具推荐,每一个都是大宝藏!

    作为一个工具控,自己也体验了上百个软件和网站,今天给大家推荐7个小众很有意思的工具,喜欢的话记得点赞支持哦~ 1.正版中国 正版中国是一个分享正版软件限时免费信息的网站.有很多优质的正版软件会做一些限 ...

  8. 不再有神的概念,将所有存在称之为文明,这很有意思

    不再有神的概念,将所有存在称之为文明,这很有意思 宇宙7级文明到底有多恐怖?科学家:不再是生物,宇宙创造者 2019-04-29 23:17 未解三分钟 标签: 宇宙文明 地球 科学 以前的科学家认为 ...

  9. 工作214:结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component

    结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component render function. 代 ...

最新文章

  1. 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图
  2. 职场小窍门:看穿同事性格的16个小动作
  3. 不用光盘可破解电脑系统密码
  4. delphi初级教程之delphi断点调试一
  5. windows10 python2.7 opencv3
  6. MySQL 中NULL和空值的区别
  7. 利用丁香园数据生成疫情分布地图(R语言)| 博文精选
  8. python循环括号_Python3中小括号()、中括号[]、花括号{}的区别详解
  9. PADS2007常用快捷键
  10. 【计算机三级网络技术】 快速求出IP地址块经聚合后的IP地址
  11. 专注于win7官网,专注win7系统安装
  12. 神奇的泡泡java游戏,抖音挤泡泡游戏叫什么名字 抖音上很火的减压游戏介绍
  13. 2015合肥市第 32 届青少年信息学(计算机)奥林匹克竞赛小学组试题
  14. 微信群被封怎么办?微信群如何防封?一招解决永不封群!
  15. 【linux系统用户管理】
  16. 修改滚动条样式的方法
  17. C#使用throw和throw ex的区别
  18. 远程桌面工具栏无法唤出-退出办法 远程桌面关机
  19. 【热门】新生儿起名测名:女孩带墨字的名字有哪些
  20. DDoS攻击的原理是什么

热门文章

  1. 前端使用vue-i18n做中英文翻译
  2. ——————————————————————————————————1203————————————————————————————————...
  3. nagios报警不发邮件
  4. Javascript中的树结构
  5. Android - MVP个人愚见
  6. Rsync服务让SLB下多台centos服务器文件同步更新
  7. 前端实例练习 - 轮播图
  8. 算法72----最大正方形
  9. 对约束条件优化问题的理解
  10. 【面试 struts2】【第三篇】struts2的问题