0

最近コードのリファクタリングを開始し、より多くのスレッドを使用してパフォーマンスを向上させようとしています。特にダウンロードと接続の場合。私は...と呼ばれる機能を持っていました

- (UIImage *)imageFromURLString:(NSString *)urlString;

...接続を確立し、受信したデータから UIImage を作成し、それを返します。

今、私はスレッドの操作を開始しましたが、戻り値を取得できないことに気付きました (スレッドが呼び出されたメソッドとは別に実行されるため、これは理にかなっています)。この種の問題を一般的に解決するための「最良の」/最もエレガントな方法は何でしょうか?

  • アトミック クラス変数を作成し、前の関数内から入力する必要がありますか?
  • UIImage オブジェクトへのポインターをメソッドに渡して、その中から塗りつぶすことはありますか?

クラス変数を使用するのが最も簡単な解決策であることは承知していますが、それはあまり「クリーン」でも最適でもないようです。前もって感謝します!

4

1 に答える 1

3

答えはブロックです

- (void)imageFromURLString:(NSString *)urlString completionBlock:(void(^)(UIImage *image))

基本的に画像がフェッチされると、呼び出し先から渡されたブロックが実行され、画像が引数として渡されます

使用法は

[self imageFromURLString:@"url" completionBlock:^(UIImage *image){
    //do some stuff with the image
}
于 2013-02-27T09:04:48.530 に答える