2

シンプルで短い答えの小さな質問です ;-)

(つまり)の違いは正確には何ですか

NSData *htmlData = [NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil];

NSData *htmlData = [NSData dataWithData:[NSURLConnection sendSynchronousRequest:self.request returningResponse:&response error:nil]]

それとも、まったく違いはありませんか?問題があれば、はい、ARC を使用します。

どうもありがとう!

4

1 に答える 1

2

シンプルで短い答えはありません:)

最初に、URL 接続から返されたデータを処理します。

2 番目に、そのデータのコピーを作成します。その「コピー」は、実際には多くの理由でディープ コピーではない場合があります。

これがどのように機能するかは、実際には両方向に進む可能性があり、多くの場合、次の理由で答えるのが困難です。

  • a)プログラムがそのデータをどのように使用するかに大きく依存し、
  • b) 使用している API の内部最適化と実装の詳細
  • c) オブジェクトのセマンティクスをコピーまたは保持する

個人的には、そのデータを渡す必要がある場合は後者を好みます。その理由は、変更可能なバリアントを持つ型の ivar をコピー (NSMutableDataこの場合) として宣言する必要があり、通常、可能であればこれらのオブジェクトの不変のコピーを使用する必要があるためです。実装の多くがコピーによって変更可能なバリアントを持つこれらの型を処理すると、処理するオブジェクトが実際に不変であることを確認することで、コピーを実際に減らすことができます。不変オブジェクトは、コピーが要求されたときに深いコピーや浅いコピーを回避できます。

そのデータがどこにも渡されない場合は、API がインスタンスを返す場合に潜在的なコピーを回避できますNSMutableData(つまり、最初のインスタンスを安全に使用できます)。

于 2012-10-17T16:03:08.100 に答える