4

UI はメイン スレッドでのみ更新する必要があることは承知していますが、表示されているビューに追加されていない限り、別のスレッドでサブビューを作成して追加することは可能ですか? メモリとパフォーマンスの問題が発生しますか? コード例を次に示します。

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock:^{ 
    // do some fancy calculations, building views
    UIView *aView = ..
    for (int i, i<1000, i++)
    {
        UIView *subView = …
        [aView addSubview:subView];
    }

    // Update UI on Main Thread
    [queue addOperationWithBlock:^{
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

            // Update the interface
            [self.view addSubview:aView];
        }];
    }];
}];
4

2 に答える 2

3

なぜこれを望まないのかについての私の理解は、CALayerスレッドセーフではないメモリに裏打ちされているということです。したがって、背景スレッドに描画することはできますが、レイヤーをレンダリングしたり、ビューを操作したりすることはできません。

つまり、複雑なビューロジックを画像コンテキストに描画し、画像をメインスレッドに渡して、画像ビューに表示します。

お役に立てれば!

于 2012-08-28T11:41:11.520 に答える
2

セカンダリ スレッドで UI を変更すると、アプリがクラッシュします。そのため、常にメイン スレッドで UI の変更を行います。

[self performSelectorOnMainThread:@selector(makeUIChanges:) withObject:nil waitUntilDone:YES];
于 2012-08-28T11:46:04.493 に答える