小编不及格*_*-八神的帖子

为什么NSOperationQueue在主线程上处理大量任务时比GCD或performSelectorOnMainThread更快?

例如,我有100次for循环.并且需要更新UIImageView,最后2个方法慢慢相同.为什么?他们之间有什么不同?

//fastest
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                       [btnThumb setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];
                        [scrollView addSubview:btnThumb];
                   }];
//slowly
                     dispatch_async(dispatch_get_main_queue(), ^
                    {
                        [btnThumb setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];
                        [scrollView addSubview:btnThumb];
                    });       
//slowly
                   [btnThumb setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];
                   [self performSelectorOnMainThread:@selector(testMethod:) withObject:[NSArray arrayWithObjects:scrollView, btnThumb, nil] waitUntilDone:NO];

    -(void) testMethod:(NSArray*)objs
    {

        UIScrollView *scroll = [objs objectAtIndex:0];
        UIButton *btn = [objs lastObject];
        [scroll addSubview:btn];
    }
Run Code Online (Sandbox Code Playgroud)

multithreading nsoperationqueue grand-central-dispatch ios

4
推荐指数
1
解决办法
1132
查看次数