2011-11-30 3 views
6

このブログでは、複数のNSURLConnectionを処理するための優れたソリューションを提供しています。tagプロパティを持つカスタムの "CustomURLConnection"クラスを作成してください。通常の後半で、NSURLConnectionのカスタムサブクラスを使用して、クラス内の追加データを後でどのように「見つける」のですか?

- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately tag:(NSString*)tag { 
    self = [super initWithRequest:request delegate:delegate startImmediately:startImmediately]; 

    if (self) { 
     self.tag = tag; 
    } 
    return self; 
} 

その後、

CustomURLConnection.m:

http://blog.emmerinc.be/index.php/2009/03/02/custom-nsurlconnection-class-with-tag/

http://blog.emmerinc.be/index.php/2009/03/15/multiple-async-nsurlconnections-example/

基本的に、彼は単にexsisting NSURLConnectionへtagプロパティを追加しましたNSURLConnectionローディングメソッドods、あなたはできる:

それは私が問題を抱えているところだ。

  • は、私が「接続+タグ」
  • 私は上記の投稿最初のコードスニペットは、通常の「接続」を作成します(なしtag)を作成し、その最終的には以下となります。私はそれを参照してください方法は、これは物事が行く方法ですconnectionDidFinishLoadingのような通常のNSURLConnectionメソッドを呼び出します。この時点でtagはどうなりますか?
  • connectionDidFinishLoadingメソッドでは、接続を「接続+タグ」にキャストして、破棄されたタグ情報が見つからないことがわかりました。どうやって?

たぶん私はちょうど自分自身を混乱させていますが、それは通常のNSURLConnection道を開始したときtagが破棄されたかのように思えます。しかしそれをサブクラスとしてキャストすることで、私は再びtagのプロパティを回復することができます。それはどこの時間に生きていたのですか?

継承をよりよく理解している人がこれを私に説明できますか?

+1

あなたは実際の型変換を行っていません。すべてのObj-Cオブジェクトは単にメモリアドレスへのポインタです。あなたは、コンパイル時に 'CustomURLConnection'であると仮定してコンパイラに指示するだけです。これはあなたのコードの実際の実行に全く影響しません。 –

答えて

4

[[CustomURLConnection alloc] initWithRequest:... delegate:... startImmediately:... startImmediately tag:...]; 

あなたはCustomURLConnectionのインスタンスを作成します。ここであなたの理解が間違っているところです:このCustomURLConnectionオブジェクトは、そのスーパークラスのすべてのメソッドを自由に呼び出すことができますが、常にCustomURLConnectionのままです。 tagは常にそこにあります。

initWithRequest:delegate:startImmediately:などのスーパークラスで定義されているメソッドは、タグについてはわかりませんが、どちらにも必要ありません。デリゲートメソッドが呼び出されるとき:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

connection引数は、上記の自分で作成した非常に同じCustomURLConnectionです。メソッドのシグネチャの型は異なりますが、それは重要ではありません。この接続のタイプがCustomURLConnectionであることがわかっているので、connectionオブジェクトを正しいタイプにキャストして新しいプロパティにアクセスすることができます。しかし、あなたがそれをしなくても、tagはまだそこにいます。

+0

ありがとう、それは良い説明です。特に*「メソッドはタグについてはわかりませんが、どちらにする必要もありません」* – cksubs

1

私はであなたが何を意味するかわからない:私は上記の投稿最初のコードスニペットは、通常の「接続」(タグ無し)を作成

ここでは、NSURLConnectionのサブクラスを作成します。どこでも後者を使うことができます、あなたは前者を使うことができます。 NSURLConnection*は、「NSURLConnection*またはそのサブクラスへのポインタ」を意味します。オリジナルのオブジェクトはCustomURLConnectionでした。追加のivarが含まれていました。この中間色は、中間ユーザーがそのスーパークラスによって参照するだけで消えません。このコードでは

関連する問題