5

グランドセントラルディスパッチ(GCD)に頭を悩ませようとしていますが、答えが見つからないようです。

したがって、一般的に、メインスレッド以外のスレッドからUIView要素を更新することは想定されていません。したがって、これは違法です。

dispatch_async(workerQueue, ^{
    self.view.backgroundColor = [UIColor redColor];
});

しかし、実際にビューに追加される前に、ビュー要素で作業することは許可されていますか?言い換えれば、これは許可されていますか?

dispatch_async(workerQueue, ^{
    UIButton *thisLevelButton = [UIButton buttonWithType:UIButtonTypeCustom];
    thisLevelButton.frame = CGRectMake(x, y, BUTTON_WIDTH, BUTTON_HEIGHT);
    thisLevelButton.tag = kLevelButtonTags + j;


    int levelState = [[[thisCat objectForKey:[levelNamesInCat objectAtIndex:j]] objectAtIndex:4] intValue];

    [thisLevelButton setBackgroundImage:[UIImage imageNamed:@"ccLSButton50lock"]forState:UIControlStateNormal];
    thisLevelButton.alpha = 0.5;
    [thisLevelButton addTarget:self action:@selector(unlockButtonAction:) forControlEvents:UIControlEventTouchUpInside];

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.view addSubview:thisLevelButton];
    }

});
4

1 に答える 1

3

はい、できます。ベストプラクティスは、を更新しないことです。初期化は問題ありません。

このブログ投稿で例を読むことができます。それはほとんどあなたが試みていることの線上にあります。

于 2012-09-25T19:58:56.023 に答える