mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
cb719a16cc
Summary: With the upgrade to React Native 0.63, we started running into nullability warnings that were breaking our build. This PR fixes those nullability warnings as well as a few other warnings in React-Core. ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For example, see: https://github.com/facebook/react-native/wiki/Changelog --> [iOS] [Fixed] - Fix xcodebuild warnings in React-Core Pull Request resolved: https://github.com/facebook/react-native/pull/29622 Test Plan: - Nullability annotations should only affect compilation, but even though RNTester compiles, I'm not fully convinced that this won't break projects downstream. It would be good to get another opinion on this. - The change in `RCTAllocateRootViewTag` is the only real logic change in this PR. We throw an exception if the root view tag is not in the correct format, so this change seems safe after some basic manual testing in RNTester. Reviewed By: shergin Differential Revision: D23386678 Pulled By: appden fbshipit-source-id: a74875195a4614c3248e8f968aa98602e3ee2de0
139 lines
6.1 KiB
Objective-C
139 lines
6.1 KiB
Objective-C
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
#import <React/RCTBridge.h>
|
|
#import <React/RCTResizeMode.h>
|
|
#import <React/RCTURLRequestHandler.h>
|
|
#import <React/RCTImageDataDecoder.h>
|
|
#import <React/RCTImageURLLoader.h>
|
|
#import <React/RCTImageCache.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
/**
|
|
* If available, RCTImageRedirectProtocol is invoked before loading an asset.
|
|
* Implementation should return either a new URL or nil when redirection is
|
|
* not needed.
|
|
*/
|
|
|
|
@protocol RCTImageRedirectProtocol
|
|
|
|
- (NSURL *)redirectAssetsURL:(NSURL *)URL;
|
|
|
|
@end
|
|
|
|
/**
|
|
* Image Downloading priority.
|
|
* Use PriorityImmediate to download images at the highest priority.
|
|
* Use PriorityPrefetch to prefetch images at a lower priority.
|
|
* The priority logic is up to each @RCTImageLoaderProtocol implementation
|
|
*/
|
|
typedef NS_ENUM(NSUInteger, RCTImageLoaderPriority) {
|
|
RCTImageLoaderPriorityImmediate,
|
|
RCTImageLoaderPriorityPrefetch
|
|
};
|
|
|
|
@protocol RCTImageLoaderProtocol<RCTURLRequestHandler>
|
|
|
|
/**
|
|
* The maximum number of concurrent image loading tasks. Loading and decoding
|
|
* images can consume a lot of memory, so setting this to a higher value may
|
|
* cause memory to spike. If you are seeing out-of-memory crashes, try reducing
|
|
* this value.
|
|
*/
|
|
@property (nonatomic, assign) NSUInteger maxConcurrentLoadingTasks;
|
|
|
|
/**
|
|
* The maximum number of concurrent image decoding tasks. Decoding large
|
|
* images can be especially CPU and memory intensive, so if your are decoding a
|
|
* lot of large images in your app, you may wish to adjust this value.
|
|
*/
|
|
@property (nonatomic, assign) NSUInteger maxConcurrentDecodingTasks;
|
|
|
|
/**
|
|
* Decoding large images can use a lot of memory, and potentially cause the app
|
|
* to crash. This value allows you to throttle the amount of memory used by the
|
|
* decoder independently of the number of concurrent threads. This means you can
|
|
* still decode a lot of small images in parallel, without allowing the decoder
|
|
* to try to decompress multiple huge images at once. Note that this value is
|
|
* only a hint, and not an indicator of the total memory used by the app.
|
|
*/
|
|
@property (nonatomic, assign) NSUInteger maxConcurrentDecodingBytes;
|
|
|
|
/**
|
|
* Loads the specified image at the highest available resolution.
|
|
* Can be called from any thread, will call back on an unspecified thread.
|
|
*/
|
|
- (nullable RCTImageLoaderCancellationBlock)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
callback:(RCTImageLoaderCompletionBlock)callback;
|
|
/**
|
|
* As above, but includes download `priority`.
|
|
*/
|
|
- (nullable RCTImageLoaderCancellationBlock)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
priority:(RCTImageLoaderPriority)priority
|
|
callback:(RCTImageLoaderCompletionBlock)callback;
|
|
|
|
/**
|
|
* As above, but includes target `size`, `scale` and `resizeMode`, which are used to
|
|
* select the optimal dimensions for the loaded image. The `clipped` option
|
|
* controls whether the image will be clipped to fit the specified size exactly,
|
|
* or if the original aspect ratio should be retained.
|
|
* `partialLoadBlock` is meant for custom image loaders that do not ship with the core RN library.
|
|
* It is meant to be called repeatedly while loading the image as higher quality versions are decoded,
|
|
* for instance with progressive JPEGs.
|
|
*/
|
|
- (nullable RCTImageLoaderCancellationBlock)loadImageWithURLRequest:(NSURLRequest *)imageURLRequest
|
|
size:(CGSize)size
|
|
scale:(CGFloat)scale
|
|
clipped:(BOOL)clipped
|
|
resizeMode:(RCTResizeMode)resizeMode
|
|
progressBlock:(RCTImageLoaderProgressBlock)progressBlock
|
|
partialLoadBlock:(RCTImageLoaderPartialLoadBlock)partialLoadBlock
|
|
completionBlock:(RCTImageLoaderCompletionBlock)completionBlock;
|
|
|
|
/**
|
|
* Finds an appropriate image decoder and passes the target `size`, `scale` and
|
|
* `resizeMode` for optimal image decoding. The `clipped` option controls
|
|
* whether the image will be clipped to fit the specified size exactly, or
|
|
* if the original aspect ratio should be retained. Can be called from any
|
|
* thread, will call callback on an unspecified thread.
|
|
*/
|
|
- (RCTImageLoaderCancellationBlock)decodeImageData:(NSData *)imageData
|
|
size:(CGSize)size
|
|
scale:(CGFloat)scale
|
|
clipped:(BOOL)clipped
|
|
resizeMode:(RCTResizeMode)resizeMode
|
|
completionBlock:(RCTImageLoaderCompletionBlock)completionBlock;
|
|
|
|
/**
|
|
* Get image size, in pixels. This method will do the least work possible to get
|
|
* the information, and won't decode the image if it doesn't have to.
|
|
*/
|
|
- (RCTImageLoaderCancellationBlock)getImageSizeForURLRequest:(NSURLRequest *)imageURLRequest
|
|
block:(void(^)(NSError *error, CGSize size))completionBlock;
|
|
/**
|
|
* Determines whether given image URLs are cached locally. The `requests` array is expected
|
|
* to contain objects convertible to NSURLRequest. The return value maps URLs to strings:
|
|
* "disk" for images known to be cached in non-volatile storage, "memory" for images known
|
|
* to be cached in memory. Dictionary items corresponding to images that are not known to be
|
|
* cached are simply missing.
|
|
*/
|
|
- (NSDictionary *)getImageCacheStatus:(NSArray *)requests;
|
|
|
|
/**
|
|
* Allows developers to set their own caching implementation for
|
|
* decoded images as long as it conforms to the RCTImageCache
|
|
* protocol. This method should be called in bridgeDidInitializeModule.
|
|
*/
|
|
- (void)setImageCache:(id<RCTImageCache>)cache;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|