後者(NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding]
)は私が推奨するオプションです。
なぜですか?
効率性という人もいます。この場合、文字列インスタンスメソッドを使用してNSDataオブジェクトを作成すると、高度に最適化されたAppleのコードへの単一のobj-cメッセージディスパッチが必要になります。もう1つのケース(classメソッドを使用して新しいNSDataオブジェクトを作成する場合)では、文字列オブジェクトへの2つのメッセージディスパッチとNSDataクラスオブジェクトへの1つのメッセージディスパッチが必要です。
しかし、ランタイムは大きく異なる可能性はなく、たとえそうであっても、エンコードのコストは文字列の長さに基づいており、NSDataオブジェクトを作成するためにどのメソッドを使用するのかに基づいていません。
NSStringでインスタンスメソッドを使用したいと思う本当の理由は、意味と明快さです。
のは、これらのオプションの疑似英語翻訳を考えてみましょう:
[string DataUsingEncoding:NSUTF8StringEncoding]
:ねえ、文字列、私はあなたがUTF8エンコーディングを使用して私に自分のNSDataのコピーを与えたいです。さて、ありがとう、そこに置いてください - いいえ、敷物にはありません。
[NSData dataWithBytes:[req_string UTF8String] length:[req_string length]]
:文字列!あなたのUTF8バイトすべてを教えてください。ええ、私もあなたの長さが必要です。 Sec。 NSData、ここに乗って、私はあなたにこの物語を拾う必要があります。私のドアの玄関を去って、それをデータオブジェクトに変換してください。文字列、待ってください。あなたに明確に思える何かを「
壊れないのですか?
楽しい:1つはNSDataのクラスメソッドで、もう1つはNSStringのインスタンスメソッドです – doNotCheckMyBlog