後者(NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding]
)是我會推薦的選項。
爲什麼?
有些人會說效率。在這種情況下,使用字符串實例方法來創建一個NSData對象只需要一個單獨的obj-c消息分派到Apple的代碼中,該代碼被高度優化。在另一種情況下(使用類方法創建一個新的NSData對象)將需要2個消息分派給你的字符串對象,1個消息分派給NSData類對象。
但是,運行時間不太可能會有很大的不同,即使他們這樣做,編碼的成本將取決於字符串的長度,而不是用於創建NSData對象的方法。
我認爲你想在NSString上使用實例方法的真正原因是語義和清晰度。
讓我們考慮這些選項的僞英譯:
[string DataUsingEncoding:NSUTF8StringEncoding]
:嘿,串,我想你使用UTF8編碼給我自己的NSData的副本。好的,謝謝,把它放在那裏 - 不,不在地毯上。
[NSData dataWithBytes:[req_string UTF8String] length:[req_string length]]
:String!給我你所有的UTF8字節。是的,哦,我也需要你的長度。秒。 NSData,過來這裏,我需要你拿起這些東西,字符串正在離開我的家門口,把它變成一個數據對象,字符串,等等,輕輕地!不要破壞任何東西」
這似乎更清楚嗎?
有趣:一個是NSData的類方法,另一個是NSString的實例方法:) – doNotCheckMyBlog 2012-02-27 04:41:42