setImageWithURL:がcellForRowAtIndexPathの効果として呼び出される限り、期待どおりに表示されるはずです...ただし、imageView.image=image;を呼び出す必要があります。メインスレッドで。これは、すべてのUI関連タスクに当てはまります。だからあなたは欲しいでしょう:
- (void)setImageWithURL:(NSURL *)URL
{
dispatch_queue_t taskQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(taskQ, ^{
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:URL]];
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = image;
NSLog(@"test");
});
});
}
編集:
NSOperationQueueを使用します。
ビューコントローラのメンバーとして操作キューを作成します。
m_operationQueue = [NSOperationQueue new];
m_operationQueue.maxConcurrentOperationCount = 1 // if you want to load images in order;
ビューがアンロードされ、テーブルが次を使用して更新されるときに、操作をキャンセルしてください。
[m_operationQueue cancelAllOperations];
setImageWithURLであなたのことをしてください
- (void)setImageWithURL:(NSURL *)URL
{
[m_operationQueue addOperationWithBlock:^{
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:URL]];
dispatch_async(dispatch_get_main_queue(), ^{
imageView.image = image;
NSLog(@"test");
});
}];
}
もう一度編集:
申し訳ありませんが、setImageがカスタムテーブルセルにあったことを忘れてしまいました。次のいずれかを実行できます。
1)+(void)initializeで初期化する静的オブジェクトにします。セルのメソッド2)ビューコントローラのクラスメソッドを介して静的オブジェクトを使用可能にする2)テーブルセルで使用可能なシングルトンインスタンスを作成する
デザインの好みはあなた次第であり、一貫性を保ちたい場合は、他にどのような方法を使用しているかによって異なります。