Iphone UILabel中的stringWithFormat和多行文本

Iphone UILabel中的stringWithFormat和多行文本,iphone,ios,Iphone,Ios,我的两个代码都很好…但我想知道…谁更好。。。 我用什么 第一个代码 NSString *advance=[[NSString alloc]initWithFormat :@"Pay in Advance Rs %i",pro.s_advance ]; UILabel *label1 =[[UILabel alloc]initWithFrame:CGRectMake(10,5,200,40)]; label1.text=advance; [cell.contentView addSubview:l

我的两个代码都很好…但我想知道…谁更好。。。 我用什么

第一个代码

NSString *advance=[[NSString alloc]initWithFormat :@"Pay in Advance Rs %i",pro.s_advance ];
UILabel *label1 =[[UILabel alloc]initWithFrame:CGRectMake(10,5,200,40)];
label1.text=advance;
[cell.contentView addSubview:label1];
[label1 release];
[advance release];
第二个代码是

UILabel *label1 =[[UILabel alloc]initWithFrame:CGRectMake(10,5,200,40)];
label1.text=[NSString stringWithFormat:@"Pay in Advance Rs %i",pro.s_advance ];
[cell.contentView addSubview:label1];
[label1 release];

这两组代码之间没有功能上的区别,除了一些非常微妙/不相关的内存语义


但我个人会使用第二个,因为它更短,更容易阅读。

第一个和第二个代码是相等的

唯一的区别是,在第二个中,您正在创建类型为
NSString
autoreleased
对象。在第一个版本中,您手动释放类型为
NSString
的对象,因为它不是
autorelease
[advancerelease]

因此,没有内存管理问题,您可以使用其中任何一种方法


我更喜欢第二个,因为代码会更干净。

…谢谢你的建议…在第一个代码中…我释放了字符串..但在第二个代码中。。我没有释放字符串…没问题吗?在第一个示例中,您使用
[NSString alloc]
创建字符串,该字符串将返回一个您必须稍后释放的对象。在第二个示例中,您使用
[NSString string…]
创建字符串,该字符串将返回一个将自动为您释放的对象。大多数情况下的一般规则是,任何使用“alloc”或“copy”或“new”或“retain”创建的对象都必须由您手动释放,任何其他对象都将自动释放。我建议您在iOS 5 SDK下编译,它将为您处理内存管理,这样您就不必真正处理哪一个更好。