最近在做程序的时候,突然发现对于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的填写中,使用到字符串,因此也就非常容易造成内存泄露。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net