代码之家  ›  专栏  ›  技术社区  ›  Laurent Crivello

自Xcode 10[duplicate]以来,UIImageView setImage在后台线程上崩溃

  •  1
  • Laurent Crivello  · 技术社区  · 7 年前

    由于iOS上的Xcode 10,以下程序正在崩溃: [Animation] +[UIView setAnimationsEnabled:] being called from a background thread. Performing any operation from a background thread on UIView or a subclass is not supported and may result in unexpected and insidious behavior. trace=...

    +(UIImage *)circularImage:(UIImage *)image withDiameter:(NSUInteger)diameter
    {
        CGRect frame = CGRectMake(0.0f, 0.0f, diameter, diameter);
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
        imageView.contentMode = UIViewContentModeScaleAspectFill;
        imageView.clipsToBounds = YES;
        [imageView setImage:image]; <--- crashing here
    ...
    }
    

    我不能在后台线程中将简单的UIImage分配给UIImageView,这正常吗?

    1 回复  |  直到 7 年前
        1
  •  14
  •   Jaya Mayu    6 年前

    您只能从主线程访问UI元素。你不能从其他线程访问它。这就是应用程序崩溃的原因。使用下面的代码。

    dispatch_async(dispatch_get_main_queue(), ^{
        //update your UI stuff here.
    });
    

    你可以用下面的Swift做同样的事情。

    DispatchQueue.main.async { // your UI stuff here }