设为首页 加入收藏

TOP

NSString实例化时,initWithFormat方法,stringWithFormat应该如何选择?
2014-10-02 03:30:46 来源: 作者: 【 】 浏览:32
Tags:NSString 实例 initWithFormat 方法 stringWithFormat 应该 如何 选择

1、 initWithFormat是实例方法
只能通过 NSString* str = [[NSString alloc] initWithFormat:@”%@”,@”Hello World”] 调用,但是必须手动release来释放内存资源
2、 stringWithFormat是类方法
可以直接用 NSString* str = [NSString stringWithFormat:@"%@",@"Hello World"] 调用,内存管理上是autorelease的,不用手动显式release


而且提出了一个常见错误:
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 做初步的检查.


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇木马的传播途径主要有哪些? 下一篇ios开发如何进行对象序列化和反序..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: