ios字符串NSString理解 release探讨
2014-09-30 21:38
337 查看
转自:http://blog.csdn.net/dongdongdongjl/article/details/8471995
最近在做程序的时候,突然发现对于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对象.
最近在做程序的时候,突然发现对于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对象.
-(NSString*) createNewString{ //情况1 -- 需要自己释放。 return [[[NSString alloc] initWithFormat:@"%@",@"1223344"] autorelease]; //情况2 -- 系统自动释放。 这种方法因为不安全,并且存在含义模糊的情况,不建议使用。 return [[[NSString alloc] initWithString:@"1223344"] autorelease]; // 情况3 -- 系统自动释放。 return @"1223344"; }
相关文章推荐
- ios常用的字符串NSString理解
- ios常用的字符串NSString理解
- ios常用的字符串NSString理解
- ios常用的字符串NSString自动释放理解
- 【iOS】字符串NSString中去掉空格
- iOS开发OC基础:OC字符串对象NSString对象方法使用基础
- 【iOS】字符串NSString中去掉空格
- IOS开发中 字符串和数组NSString NSArray操作
- iphone ios 字符串NSString格式化format输出
- 4.2 iOS开发视频教程—NSString字符串的使用
- iphone ios 字符串NSString格式化format输出
- iOS 判断NSString是否包含某个字符串
- IOS开发中 字符串和数组NSString NSArray操作
- 黑马程序员——iOS——Foundation框架——字符串NSString
- ios NSString 字符串常用方法
- 【ios】NSString字符串相加 相连接
- [ios] IOS开发中 字符串和数组NSString NSArray操作【转】
- ios开发——NSString如何从标准输入设备获取字符串
- iOS开发笔记--NSString字符串处理
- ios学习--Objective C内存管理进阶(二):理解autorelease