最近在做程序的时候,突然发现对于NSString的理解还是存在问题的。因此补充一片blog,希望对刚刚进入OC开发并搞不清楚内存泄露问题的人一点指引。

赋值:

NSString * str = @"123";   // 这段代码的含义其实就是附一个常量给str,该部分由系统自动管理,不需要release释放,是会autorelease的。

NSString * str = [[NString alloc] initWithString :@"111"]; // 这种写法本身存在问题,因为这个代码的含义是说给str附一个常量,因此会被编译器优化,因此也是不需要release的,尽管有alloc出现。

NSString * str = [[NSString alloc] initWithFormat:@"123"] ;// 必须要进行release才可以,因为这样就会导致内存泄露。

NSString * str = [[NSString stringWithFormat:@"111"];// 则个不需要release,也不会产生内存泄露,因为该部分调用的是系统的类方法,也就是会autorelease。这种方法其实也被称之为临时的变量使用方法。

补充一点内容:

1、initWithFormat是实例方法

只能通过 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 调用,但是必须手动release来释放内存资源

2、stringWithFormat是类方法

可以直接用 NSString* str = [NSString stringWithFormat:@"%@",@"Hello World"] 调用,内存管理上是autorelease的,不用手动显式release

 

经常在uilable的填写中,使用到字符串,因此也就非常容易造成内存泄露。比较正确的方法如下两种:

解决办法有二个:

1、

NSString * str = [[NSString alloc] initWithFormat:@"%@",@"abc"];

label.text = str;

[str release]

最后在dealloc中再[label release]

2、

label.text = [NSString stringWithFormat:@"%@",@"abc"];

另外,对于函数调用,也会经常用到nsstring作为一个返回值。因此一个比较正确的函数的处理方法如下:

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

  1. <span style="color:#454545">-(NSString*) createNewString{
  2. //情况1 -</span><span style="color:#ff0000">- 需要自己释放</span><span style="color:#454545">。
  3. return [[[NSString alloc] initWithFormat:@"%@",@"1223344"] autorelease];
  4. //情况2  -</span><span style="color:#ff0000">- 系统自动释放。 这种方法因为不安全,并且存在含义模糊的情况,不建议使用。</span><span style="color:#454545">
  5. return [[[NSString alloc] initWithString:@"1223344"] autorelease];
  6. // 情况3 -</span><span style="color:#ff0000">- 系统自动释放。</span><span style="color:#454545">
  7. return @"1223344";
  8. }</span>
  9. 原文http://blog.csdn.net/dongdongdongjl/article/details/8471995

ios常用的字符串NSString自动释放理解的更多相关文章

  1. iOS学习之字符串(NSString)的截取、匹配、分隔

    截取 NSString *str1 = @"this is zero"; 1.从第三个字符开始,截取长度为2的字符串.........注:空格算作一个字符 NSString *st ...

  2. iOS中的字符串NSString

    创建一个字符串对象: NSstring * str1 = @"hello world"; NSString * str = [[NSString alloc]initWithStr ...

  3. iOS中计算字符串NSString的高度

    根据固定宽度计算字符串高度: NSString *info = @"但是公司的高度是广东省公司的广东省高速度来开个大帅哥多撒谎个爱好就跟他说噶三公司噶是的刚好是我哥如果黑暗如果坏都干撒降低公 ...

  4. iOS UILabel根据字符串长度自动适应宽度和高度

    //这个frame是初设的,没关系,后面还会重新设置其size.     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0,0, ...

  5. 自动释放池的前世今生 ---- 深入解析 autoreleasepool

    http://draveness.me/autoreleasepool.html 关注仓库,及时获得更新:iOS-Source-Code-Analyze Follow: Draveness · Git ...

  6. ios 常用字符串NSString的操作

    //将NSData转化为NSString        NSString* str = [[NSString alloc] initWithData:response encoding:NSUTF8S ...

  7. iOS内存管理系列之二:自动释放与便捷方法

    有时候一个所有者创建一个对象后,会立刻将该对象的指针传递给其它所有者.这时,这个创建者不希望再拥有这个对象,但如果立刻给它发送一个release消息会导致这个对象被立刻释放掉——这样其它所有者还没有来 ...

  8. iOS中自动释放问题?

    --前言:iOS开发中关于对象的释放问题,虽然知道规则,但总不清楚自动释放的对象什么时候彻底消失?它存在的多久?什么情况会消失?都不清楚,每次用自动释放对象,总有点心虚的感觉,以下是一些例子.研究. ...

  9. iOS常用---NSString,NSMutabuleString

    普通的创建字符串: NSString *string =[[NSString alloc]init]; //创建一个空的字符串,即 @“” 一 .字符串读取本地文件: 参数一: 文件地址 参数二: 文 ...

随机推荐

  1. Deep Learning基础--Softmax求导过程

    一.softmax函数 softmax用于多分类过程中,它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类! 假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个 ...

  2. 出现ERROR: While executing gem ... (Gem::FilePermissionError)这种错误的解决办法

    重新安装ruby即可解决 brew install ruby

  3. sendEmail实现邮件报警

    安装 wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz 或者点击下载 tar -xf sen ...

  4. Linux命令参数处理 shell脚本函数getopts

    getopts 命令 用途 处理命令行参数,并校验有效选项. 语法 getopts 选项字符串 名称 [ 参数 ...] 描述 getopts 的设计目标是在循环中运行,每次执行循环,getopts ...

  5. CSS初步了解

    CSS 概述 个人理解为对html的扩展,对html关键字进行功能添加. CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表 ...

  6. Gradient-Based Learning Applied to Document Recognition 部分阅读

    卷积网络        卷积网络用三种结构来确保移位.尺度和旋转不变:局部感知野.权值共享和时间或空间降采样.典型的leNet-5如下图所示: C1中每个特征图的每个单元和输入的25个点相连,这个5* ...

  7. poj 2420(模拟退火)

    A Star not a Tree? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6066   Accepted: 285 ...

  8. Hadoop案例(五)过滤日志及自定义日志输出路径(自定义OutputFormat)

    过滤日志及自定义日志输出路径(自定义OutputFormat) 1.需求分析 过滤输入的log日志中是否包含xyg (1)包含xyg的网站输出到e:/xyg.log (2)不包含xyg的网站输出到e: ...

  9. 【PAT】1008. 数组元素循环右移问题 (20)

    1008. 数组元素循环右移问题 (20) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN- ...

  10. 【LOJ】 #2132. 「NOI2015」荷马史诗

    题解 k叉哈夫曼树,但是没有了二叉那样的最后一定能合并成一个树根的优秀性质,我们就不断模拟操作看看到了哪一步能用的节点数< k,然后先拿这些节点数合并起来 然后就可以k个k个合并了,大小一样先拿 ...