objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
来源:互联网 发布:科技感 设计 知乎 编辑:程序博客网 时间:2024/05/12 04:28
objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
今天在看书上的一段代码时,发现NSString实例化时,有时用的是initWithFormat方法,有时用的是stringWithFormat,到底应该如何选择呢?
区别:
1、initWithFormat是实例方法
只能通过 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 调用,但是必须手动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 And Analyze 做初步的检查.
作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
今天在看书上的一段代码时,发现NSString实例化时,有时用的是initWithFormat方法,有时用的是stringWithFormat,到底应该如何选择呢?
区别:
1、initWithFormat是实例方法
只能通过 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 调用,但是必须手动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 And Analyze 做初步的检查.
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- Objective-C NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- objective-C: NSString应当用initWithFormat? 还是 stringWithFormat?
- iOS: NSString应该用initWithFormat? 还是 stringWithFormat?
- NSString应该用initWithFormat? 还是 stringWithFormat?
- stringWithFormat与[NSString alloc]initWithFormat 区别
- Objective C: (id)stringWithFormat:(NSString *)format, ... ) 是如何实现的?
- objective-C: NSString应该用…
- initWithFormat 和stringWithFormat的区别
- initWithFormat与initWithString的区别、initWithFormat与stringWithFormat的区别
- MRC下的 initWithFormat: 和 stringWithFormat:
- [iOS] stringWithFormat 和 initWithFormat 有何不同?
- iOS stringWithFormat 和 initWithFormat 有何不同?
- Oracle入门(一) 不可不知的专业术语
- 11-05作业
- Android ListView怎么取消点击效果
- Win8 应用开发介绍(一) Win8新特性
- jquery js 页面元素定位
- objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
- c#获取当前日期时间(转)
- 11-06作业
- struts2文件下载
- firefor插件Firebug之妙用
- Win8 应用开发介绍(二) Win8应用为王
- 复制构造函数 [飘过的小牛]
- 相见恨晚之 UML
- 为何Emacs和Vim被称为两大神器