ObjC(Objective-C):NSString应该用initWithFormat?还是stringWit

ObjC(Objective-C): NSString应该用initWithFormat?还是stringWithFormat?

今天在看书上的一段代码时,发现NSString实例化时,有时用的是initWithFormat方法,有时用的是stringWithFormat,到底应该如何选择呢?

区别:

1、initWithFormat是实例方法

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

2、stringWithFormat是类方法

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


另外国外有个贴子对此有专门讨论(http://www.iphonedevsdk.com/forum/iphone-sdk-development/29249-nsstring-initwithformat-vs-stringwithformat.html)

而且提出了一个常见错误:

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

最后在dealloc中将label给release掉

但是仍然会发生内存泄漏!

原因在于:用label.text =...时,实际是隐式调用的label的setText方法,这会retain label内部的字符串变量text(哪怕这个字符串的内容跟传进来的字符串内容相同,但系统仍然当成二个不同的字符串对象),所以最后release label时,实际上只释放了label内部的text字符串,但是最初用initWithFormat生成的字符串并未释放,最终造成了泄漏。

解决办法有二个:

1、

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

label.text = str;

[str release]

最后在dealloc中再[label release]

2、

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

然后剩下的事情交给NSAutoreleasePool

最后,如果你不确定你的代码是否有内存泄漏问题,可以用Xcode中的Build-->Build AndAnalyze 做初步的检查.

作者:菩提树下的杨过

出处:http://www.cnblogs.com/yjmyzz/archive/2011/02/25/1965338.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类:13.Obj-C & iOS

object cnsstring长度和去掉前后空格的方法

object c求nsstring 长度和去掉前后空格的方法

NSString *searchText = [[searchBar text]stringByTrimmingCharactersInSet: [NSCharacterSetwhitespaceAndNewlineCharacterSet]];

if ([searchText length] > 0){

self.keyWordRecord.query = searchText;

self.title = searchText;

[self startDownLoadDataFromInternet];

}

NSLog(@"searchText:%@",searchText);

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/97338.html

更多阅读

去头屑最有效的办法 去头屑用陈醋还是白醋

去头屑最有效的办法——简介头皮屑其实每个人都或多或少有一些,可是正常的情况下不应该过多。去头屑最有效的办法——工具/原料去屑洗发水治疗用洗发水(如采乐)均衡

深度解析Objective-C笔试题 自主招生笔试题解析

本文介绍的是Objective-C笔试题,先来问一个,为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?看本文详细详细解答内容Objective-C笔试题是本文要介绍的内容,很详细的讲解写的答案。大约有18个Objective

起名的笔画计算,用简体字还是繁体字(转 简体繁体字在线转换

中国周易起名网,周易起名大师谢咏谈起名笔画是按简体字还是繁体字;在谈起名之前,先说说起名的范围,在当今的易经自古为群经之首,故而能够遵循易道而行事之人也多为人上之人,现在已经再次进入易经文化时代,富人之所以更富,无不与其处处遵循

声明:《ObjC(Objective-C):NSString应该用initWithFormat?还是stringWit》为网友冷月轻吟分享!如侵犯到您的合法权益请联系我们删除