@@ -155,8 +155,11 @@ - (void)fetchImageDataWithProvider:(NSItemProvider *)imageProvider operation:(SD
155155 if (!image) {
156156 error = [NSError errorWithDomain: SDWebImageErrorDomain code: SDWebImageErrorBadImageData userInfo: nil ];
157157 } else {
158- LPLinkMetadata *metadata = url.sd_linkMetadata ;
159- image.sd_extendedData = [metadata.title dataUsingEncoding: NSUTF8StringEncoding];
158+ // The original metadata contains image data and is large, we pick the metadata info only to avoid double cache of image
159+ LPLinkMetadata *metadata = [self .class strippedMetadata: url.sd_linkMetadata];
160+ // Save the metadata to extended data
161+ NSData *extendedData = [NSKeyedArchiver archivedDataWithRootObject: metadata requiringSecureCoding: YES error: nil ];
162+ image.sd_extendedData = extendedData;
160163 }
161164 if (completedBlock) {
162165 dispatch_main_async_safe (^{
@@ -196,8 +199,11 @@ - (void)fetchImageWithProvider:(NSItemProvider *)imageProvider operation:(SDImag
196199 if (!image) {
197200 error = [NSError errorWithDomain: SDWebImageErrorDomain code: SDWebImageErrorBadImageData userInfo: nil ];
198201 } else {
199- LPLinkMetadata *metadata = url.sd_linkMetadata ;
200- image.sd_extendedData = [metadata.title dataUsingEncoding: NSUTF8StringEncoding];
202+ // The original metadata contains image data and is large, we pick the metadata info only to avoid double cache of image
203+ LPLinkMetadata *metadata = [self .class strippedMetadata: url.sd_linkMetadata];
204+ // Save the metadata to extended data
205+ NSData *extendedData = [NSKeyedArchiver archivedDataWithRootObject: metadata requiringSecureCoding: YES error: nil ];
206+ image.sd_extendedData = extendedData;
201207 }
202208 if (completedBlock) {
203209 dispatch_main_async_safe (^{
@@ -220,6 +226,17 @@ - (BOOL)shouldBlockFailedURLWithURL:(NSURL *)url error:(NSError *)error {
220226 return shouldBlockFailedURL;
221227}
222228
229+ #pragma mark - Util
230+ + (LPLinkMetadata *)strippedMetadata : (LPLinkMetadata *)originalMetadata {
231+ NSCParameterAssert (originalMetadata);
232+ LPLinkMetadata *metadata = [LPLinkMetadata new ];
233+ metadata.URL = originalMetadata.URL ;
234+ metadata.originalURL = originalMetadata.originalURL ;
235+ metadata.title = originalMetadata.title ;
236+ metadata.remoteVideoURL = originalMetadata.remoteVideoURL ;
237+ return metadata;
238+ }
239+
223240#pragma mark - KVO
224241
225242- (void )observeValueForKeyPath : (NSString *)keyPath ofObject : (id )object change : (NSDictionary *)change context : (void *)context
0 commit comments