From fe1e81ef90449d314bd09b18554aadaba0d81c90 Mon Sep 17 00:00:00 2001 From: David Sinclair Date: Fri, 22 Jul 2022 21:33:37 -0700 Subject: [PATCH] #1697 (clean scroll stutter on iPhone) - Heaviest activity was scaling story thumbnails on the main thread; moved to a background thread. - No more heavy activity when scrolling shown in Instruments. --- .../Classes/FeedDetailObjCViewController.m | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/clients/ios/Classes/FeedDetailObjCViewController.m b/clients/ios/Classes/FeedDetailObjCViewController.m index 91767d0c3..8b1b93546 100644 --- a/clients/ios/Classes/FeedDetailObjCViewController.m +++ b/clients/ios/Classes/FeedDetailObjCViewController.m @@ -709,20 +709,25 @@ typedef NS_ENUM(NSUInteger, MarkReadShowMenu) for (NSString *storyImageUrl in storyImageUrls) { // NSLog(@"Fetching image: %@", storyImageUrl); [manager GET:storyImageUrl parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { - UIImage *image = (UIImage *)responseObject; - - if (!image || image.size.height < 50 || image.size.width < 50) { - [self.appDelegate.cachedStoryImages setObject:[NSNull null] + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0ul); + dispatch_async(queue, ^{ + UIImage *image = (UIImage *)responseObject; + + if (!image || image.size.height < 50 || image.size.width < 50) { + [self.appDelegate.cachedStoryImages setObject:[NSNull null] + forKey:storyImageUrl]; + return; + } + + CGSize maxImageSize = CGSizeMake(300, 300); + image = [image imageByScalingAndCroppingForSize:maxImageSize]; + [self.appDelegate.cachedStoryImages setObject:image forKey:storyImageUrl]; - return; - } - - CGSize maxImageSize = CGSizeMake(300, 300); - image = [image imageByScalingAndCroppingForSize:maxImageSize]; - [self.appDelegate.cachedStoryImages setObject:image - forKey:storyImageUrl]; - [self.appDelegate.feedDetailViewController - showStoryImage:storyImageUrl]; + dispatch_async(dispatch_get_main_queue(), ^{ + [self.appDelegate.feedDetailViewController + showStoryImage:storyImageUrl]; + }); + }); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }]; @@ -1328,9 +1333,9 @@ typedef NS_ENUM(NSUInteger, MarkReadShowMenu) stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]]; } } - + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0ul); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), - dispatch_get_main_queue(), ^(void) { + queue, ^(void) { [self cacheStoryImages:storyImageUrls]; });