Removed all calls to [UIImage imageWithData:] on a background thread

Summary: public

I had previously assumed (based on past experience and common wisdom) that `[UIImage imageWithData:]` was safe to call concurrently and/or off the main thread, but it seems that may not be the case (see https://github.com/AFNetworking/AFNetworking/pull/2815).

This diff replaces `[UIImage imageWithData:]` with ImageIO-based decoding wherever possible, and ensures that it is called on the main thread wherever that's not possible/convenient.

I've also serialized access to the `NSURLCache` inside `RCTImageLoader`, which was causing a separate-but-similar crash when loading images.

Reviewed By: fkgozali

Differential Revision: D2678369

fb-gh-sync-id: 74d033dafcf6c412556e4c96f5ac5d3432298b18
This commit is contained in:
Nick Lockwood
2015-11-20 05:15:49 -08:00
committed by facebook-github-bot-6
parent 1a1c3f76a2
commit 0fe074acbd
4 changed files with 137 additions and 105 deletions

View File

@@ -255,7 +255,8 @@ UIImage *RCTDecodeImageWithData(NSData *data,
// adjust scale
size_t actualWidth = CGImageGetWidth(imageRef);
CGFloat scale = actualWidth / targetSize.width;
CGFloat scale = actualWidth / targetSize.width * destScale;
// return image
UIImage *image = [UIImage imageWithCGImage:imageRef
scale:scale