后者(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