ios常用的字符串NSString理解

(感谢原作者)本文章转载自:http://blog.csdn.net/dongdongdongjl/article/details/8471995

赋值:


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对象.

[objc]  view plain copy
  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>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值