iOS NSstring注意的地方


赋值:
安全


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

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

NSString * str = [[NSString alloc] initWithFormat:@"123"] ;// 必需要进行release才能够,由于这样就会致使内存泄露。 ui

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


补充一点内容: .net

一、initWithFormat是实例方法 orm

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

二、stringWithFormat是类方法 blog

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


常常在uilable的填写中,使用到字符串,所以也就很是容易形成内存泄露。比较正确的方法以下两种:


解决办法有二个:

一、

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

label.text = str;

[str release]

最后在dealloc中再[label release]

二、

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>  
相关文章
相关标签/搜索