From 34056cefd3692de4381c20b50787f5abf79edccd Mon Sep 17 00:00:00 2001 From: manuroe Date: Thu, 5 Oct 2017 09:34:17 +0200 Subject: [PATCH 1/2] EventFormatter: Improve updateRoomSummary:withStateEvents: to avoid to compute room avatar & displayname on almost every state events. When initialsyncing with big rooms, the previous implementation leaded the app to out of memory because ARC did not have time to auto release objects (mainly objects returned by MXRoomState.members). --- Riot/Utils/EventFormatter.m | 53 ++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/Riot/Utils/EventFormatter.m b/Riot/Utils/EventFormatter.m index 516f15635..a4a5c6f10 100644 --- a/Riot/Utils/EventFormatter.m +++ b/Riot/Utils/EventFormatter.m @@ -224,9 +224,9 @@ BOOL ret = [super session:session updateRoomSummary:summary withStateEvents:stateEvents]; // Check whether the room display name and/or the room avatar url should be updated at Riot level. - NSString *riotRoomDisplayName; - NSString *riotRoomAvatarURL; - + BOOL refreshRiotRoomDisplayName = NO; + BOOL refreshRiotRoomAvatarURL = NO; + for (MXEvent *event in stateEvents) { switch (event.eventType) @@ -235,45 +235,50 @@ case MXEventTypeRoomAliases: case MXEventTypeRoomCanonicalAlias: { - if (!riotRoomDisplayName.length) - { - riotRoomDisplayName = [self riotRoomDisplayNameFromRoomState:summary.room.state]; - } + refreshRiotRoomDisplayName = YES; break; } case MXEventTypeRoomMember: { - if (!riotRoomDisplayName.length) - { - riotRoomDisplayName = [self riotRoomDisplayNameFromRoomState:summary.room.state]; - } + refreshRiotRoomDisplayName = YES; // Do not break here to check avatar url too. } case MXEventTypeRoomAvatar: { - if (!riotRoomAvatarURL.length) - { - riotRoomAvatarURL = [self riotRoomAvatarURLFromRoomState:summary.room.state]; - } + refreshRiotRoomAvatarURL = YES; break; } default: break; } + + if (refreshRiotRoomDisplayName && refreshRiotRoomAvatarURL) + { + break; + } } - - if (riotRoomDisplayName.length && ![summary.displayname isEqualToString:riotRoomDisplayName]) + + if (refreshRiotRoomDisplayName) { - summary.displayname = riotRoomDisplayName; - ret = YES; + NSString *riotRoomDisplayName = [self riotRoomDisplayNameFromRoomState:summary.room.state]; + + if (riotRoomDisplayName.length && ![summary.displayname isEqualToString:riotRoomDisplayName]) + { + summary.displayname = riotRoomDisplayName; + ret = YES; + } } - - if (riotRoomAvatarURL.length && ![summary.avatar isEqualToString:riotRoomAvatarURL]) + if (refreshRiotRoomAvatarURL) { - summary.avatar = riotRoomAvatarURL; - ret = YES; + NSString *riotRoomAvatarURL = [self riotRoomAvatarURLFromRoomState:summary.room.state]; + + if (riotRoomAvatarURL.length && ![summary.avatar isEqualToString:riotRoomAvatarURL]) + { + summary.avatar = riotRoomAvatarURL; + ret = YES; + } } - + return ret; } From 86d4765fd8651fdfa5b533c27832e5949b9786c3 Mon Sep 17 00:00:00 2001 From: manuroe Date: Thu, 5 Oct 2017 09:36:40 +0200 Subject: [PATCH 2/2] Log applicationDidReceiveMemoryWarning at AppDelegate level --- Riot/AppDelegate.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Riot/AppDelegate.m b/Riot/AppDelegate.m index 7ef124cad..505ca3543 100644 --- a/Riot/AppDelegate.m +++ b/Riot/AppDelegate.m @@ -534,6 +534,11 @@ NSString *const kAppDelegateNetworkStatusDidChangeNotification = @"kAppDelegateN [self stopGoogleAnalytics]; } +- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application +{ + NSLog(@"[AppDelegate] applicationDidReceiveMemoryWarning"); +} + - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { BOOL continueUserActivity = NO;