Cache instantiated interactions (#1152)

*most* of our time when scrolling around a message view is in this
method. Doubly so when these are media items.

remove interaction from cache when it is deleted/updated

// FREEBIE
pull/1/head
Michael Kirk 9 years ago
parent 7d8292fd53
commit c0bb704d2d

@ -91,6 +91,8 @@ typedef enum : NSUInteger {
@property (nonatomic) BOOL composeOnOpen;
@property (nonatomic) BOOL peek;
@property NSCache *messageAdapterCache;
@end
@interface UINavigationItem () {
@ -150,6 +152,8 @@ typedef enum : NSUInteger {
[super viewDidLoad];
[self.navigationController.navigationBar setTranslucent:NO];
self.messageAdapterCache = [[NSCache alloc] init];
_showFingerprintDisplay =
[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(showFingerprint)];
@ -1590,6 +1594,8 @@ typedef enum : NSUInteger {
for (YapDatabaseViewRowChange *rowChange in messageRowChanges) {
switch (rowChange.type) {
case YapDatabaseViewChangeDelete: {
TSInteraction *interaction = [self interactionAtIndexPath:rowChange.indexPath];
[self.messageAdapterCache removeObjectForKey:interaction.uniqueId];
[self.collectionView deleteItemsAtIndexPaths:@[ rowChange.indexPath ]];
break;
}
@ -1609,7 +1615,8 @@ typedef enum : NSUInteger {
if (_lastDeliveredMessageIndexPath) {
[rowsToUpdate addObject:_lastDeliveredMessageIndexPath];
}
TSInteraction *interaction = [self interactionAtIndexPath:rowChange.indexPath];
[self.messageAdapterCache removeObjectForKey:interaction.uniqueId];
[self.collectionView reloadItemsAtIndexPaths:rowsToUpdate];
scrollToBottom = YES;
break;
@ -1661,7 +1668,15 @@ typedef enum : NSUInteger {
- (TSMessageAdapter *)messageAtIndexPath:(NSIndexPath *)indexPath {
TSInteraction *interaction = [self interactionAtIndexPath:indexPath];
return [TSMessageAdapter messageViewDataWithInteraction:interaction inThread:self.thread];
TSMessageAdapter *messageAdapter = [self.messageAdapterCache objectForKey:interaction.uniqueId];
if (messageAdapter == nil) {
messageAdapter = [TSMessageAdapter messageViewDataWithInteraction:interaction inThread:self.thread];
[self.messageAdapterCache setObject:messageAdapter forKey: interaction.uniqueId];
}
return messageAdapter;
}
#pragma mark group action view

Loading…
Cancel
Save