mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-14 21:08:48 +00:00
Summary: * Issue: [IGListAdapter visibleSectionControllers] calls [UICollectionViewLayout layoutAttributesForElementsInRect:] which can be expensive. And since visibleSectionControllers is called in scrollViewDidScroll, it can add up and take a toll on scroll performance. On an iPhone 7, it's in 2-10% of the main-thread samples (using Time Profiler). * Fix: IGListDisplayHandler conveniently keeps track of visible IGListSectionControllers, so let's just use that. Now, [IGListAdapter visibleSectionControllers] drops to ~0.3% of samples. Reviewed By: rnystrom Differential Revision: D6351474 fbshipit-source-id: 66914db95e08498927bfbceda4d2e9d58cbc7530
89 lines
3.3 KiB
Objective-C
89 lines
3.3 KiB
Objective-C
/**
|
|
* Copyright (c) 2016-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
#import <IGListKit/IGListMacros.h>
|
|
|
|
@class IGListAdapter;
|
|
@class IGListSectionController;
|
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
IGLK_SUBCLASSING_RESTRICTED
|
|
@interface IGListDisplayHandler : NSObject
|
|
|
|
/**
|
|
Counted set of the currently visible section controllers.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSCountedSet<IGListSectionController *> *visibleListSections;
|
|
|
|
/**
|
|
Tells the handler that a cell will be displayed in the IGListAdapter.
|
|
|
|
@param cell A cell that will be displayed.
|
|
@param listAdapter The adapter the cell will display in.
|
|
@param sectionController The section controller that manages the cell.
|
|
@param object The object that powers the section controller.
|
|
@param indexPath The index path of the cell in the UICollectionView.
|
|
*/
|
|
- (void)willDisplayCell:(UICollectionViewCell *)cell
|
|
forListAdapter:(IGListAdapter *)listAdapter
|
|
sectionController:(IGListSectionController *)sectionController
|
|
object:(id)object
|
|
indexPath:(NSIndexPath *)indexPath;
|
|
|
|
/**
|
|
Tells the handler that a cell did end display in the IGListAdapter.
|
|
|
|
@param cell A cell that will be displayed.
|
|
@param listAdapter The adapter the cell will display in.
|
|
@param sectionController The section controller that manages the cell.
|
|
@param indexPath The index path of the cell in the UICollectionView.
|
|
*/
|
|
- (void)didEndDisplayingCell:(UICollectionViewCell *)cell
|
|
forListAdapter:(IGListAdapter *)listAdapter
|
|
sectionController:(IGListSectionController *)sectionController
|
|
indexPath:(NSIndexPath *)indexPath;
|
|
|
|
|
|
/**
|
|
Tells the handler that a supplementary view will be displayed in the IGListAdapter.
|
|
|
|
@param view A supplementary view that will be displayed.
|
|
@param listAdapter The adapter the supplementary view will display in.
|
|
@param sectionController The section controller that manages the supplementary view.
|
|
@param object The object that powers the section controller.
|
|
@param indexPath The index path of the supplementary view in the UICollectionView.
|
|
*/
|
|
- (void)willDisplaySupplementaryView:(UICollectionReusableView *)view
|
|
forListAdapter:(IGListAdapter *)listAdapter
|
|
sectionController:(IGListSectionController *)sectionController
|
|
object:(id)object
|
|
indexPath:(NSIndexPath *)indexPath;
|
|
|
|
|
|
/**
|
|
Tells the handler that a supplementary view did end display in the IGListAdapter.
|
|
|
|
@param view A supplementary view that will be displayed.
|
|
@param listAdapter The adapter the supplementary view will display in.
|
|
@param sectionController The section controller that manages the supplementary view.
|
|
@param indexPath The index path of the supplementary view in the UICollectionView.
|
|
*/
|
|
- (void)didEndDisplayingSupplementaryView:(UICollectionReusableView *)view
|
|
forListAdapter:(IGListAdapter *)listAdapter
|
|
sectionController:(IGListSectionController *)sectionController
|
|
indexPath:(NSIndexPath *)indexPath;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|