私は主なスレッドでUIが更新されていることを覚えていると思いますが、私の問題は1000 +画像のUIScrollViewを持っていて、すぐに表示される画像を切り替えるルーチンを書きましたその実際のイメージを表示するためのビュー、および可視のビューから外れたときにプレースホルダイメージに切り替わります。すべてのオフスクリーンイメージは同じプレースホルダを共有し、メモリ負荷を大幅に削減します。NSOperationQueue/NSOperationInvocationを使用して私のUIScrollViewの内容を更新できないのはなぜですか?
私は、ビューの次の数個のタイルをオン/オフに切り替える2つの方法を書いており、ある方向に十分にスクロールした場合にはキックオフされます。スクロールは、UIScrollViewDelegateコールバックメソッドscrollViewDidScrollを介して検出されます。
この戦略はうまくいきますが、スクロールバーのスクロールは低速デバイス(iPad 1)でちょっとジッタがあります。パフォーマンスを向上させたいので、スクロールビューの内容を更新する2つのメソッドがNSOperationInvocationで、NSOperationQueueに追加されるようにコードを変更できると考えました。
しかし、これを行うと、たとえ優先度がVeryHighに設定されていても、スクロールするときにUIが更新されず、待ち行列が大きくなります。観察された動作は、画像がプレースホルダー画像を保持し、オンにならないことです。
なぜこれは機能しませんか? NSOperationInvocationため
コード:
ImageThumbView *thumb = [boardThumbsArray objectAtIndex:lowestLoadedThumbTag - i];
[loadedThumbsArray addObject:thumb];
[thumb showThumbImage];
ImageThumbViewは、Appleの "PhotoScroller" のサンプルコードでUIButtonサブクラス
- (void)showThumbImage {
if (thumbImagePath != nil) {
thumbImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL fileURLWithPath:thumbImagePath]]];
} else {
NSLog(@"%@", @"Cannot show thumb image: thumbImagePath is nil");
}
[self setBackgroundImage:thumbImage forState:UIControlStateNormal];
[self setNeedsDisplay];
}