2011-11-08 33 views
1

我的兩個代碼運行良好..但我想知道..誰更好... 和我使用哪個?stringWithFormat和UILabel中的多行文本

第一代碼.....

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]; 

回答

1

第一和第二碼相等。

唯一的區別是,在第二個區域中,您正在創建autoreleased類型的對象NSString。在第一個要手動釋放NSString類型的對象,因爲它不是autoreleased[advance release];

所以不存在內存管理問題,你可以使用任何一個接近。

我寧願第二個,因爲代碼會更清潔。

+0

@Nekto ...謝謝 – GauravBoss

+0

我會推薦在iOS 5 SDK下編譯,它將爲您處理內存管理,然後您不必真正處理哪一個更好。 – Ziminji

1

有這兩套代碼之間沒有功能上的差異,除了一些非常微妙/不相關的記憶語義。

但我個人會使用第二個,因爲它更短,更容易閱讀。

+0

...感謝您的建議...在第一代碼...我釋放字符串..但在第二個代碼..我不釋放字符串....它的好嗎? – GauravBoss

+0

第一個使用'[NSString alloc]'創建字符串,它將返回一個必須稍後釋放的對象。在第二個中,你正在使用'[NSString string ...]'來創建字符串,它將返回一個將自動爲你釋放的對象。在大多數情況下,通常的規則是用「alloc」或「copy」或「new」或「retain」創建的任何對象都必須由您手動釋放,其他任何對象都會自動釋放。 –

+0

@abhi ...感謝您給寶貴的時間... :) – GauravBoss