cache result of responds to selector

This commit is contained in:
Garrett Moon
2015-08-12 11:46:46 -07:00
parent 4f4a26d2a3
commit 592e0301dd

View File

@@ -119,7 +119,8 @@ static BOOL _isInterceptedSelector(SEL sel)
NSMutableArray *_batchUpdateBlocks; NSMutableArray *_batchUpdateBlocks;
BOOL _asyncDataFetchingEnabled; BOOL _asyncDataFetchingEnabled;
BOOL _implementsInsetSection; BOOL _asyncDelegateImplementsInsetSection;
BOOL _collectionViewLayoutImplementsInsetSection;
ASBatchContext *_batchContext; ASBatchContext *_batchContext;
@@ -175,6 +176,8 @@ static BOOL _isInterceptedSelector(SEL sel)
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
} }
_collectionViewLayoutImplementsInsetSection = [layout respondsToSelector:@selector(sectionInset)];
return self; return self;
} }
@@ -255,12 +258,12 @@ static BOOL _isInterceptedSelector(SEL sel)
super.delegate = nil; super.delegate = nil;
_asyncDelegate = nil; _asyncDelegate = nil;
_proxyDelegate = nil; _proxyDelegate = nil;
_implementsInsetSection = NO; _asyncDelegateImplementsInsetSection = NO;
} else { } else {
_asyncDelegate = asyncDelegate; _asyncDelegate = asyncDelegate;
_proxyDelegate = [[_ASCollectionViewProxy alloc] initWithTarget:_asyncDelegate interceptor:self]; _proxyDelegate = [[_ASCollectionViewProxy alloc] initWithTarget:_asyncDelegate interceptor:self];
super.delegate = (id<UICollectionViewDelegate>)_proxyDelegate; super.delegate = (id<UICollectionViewDelegate>)_proxyDelegate;
_implementsInsetSection = ([_asyncDelegate respondsToSelector:@selector(collectionView:layout:insetForSectionAtIndex:)] ? 1 : 0); _asyncDelegateImplementsInsetSection = ([_asyncDelegate respondsToSelector:@selector(collectionView:layout:insetForSectionAtIndex:)] ? 1 : 0);
} }
} }
@@ -554,11 +557,11 @@ static BOOL _isInterceptedSelector(SEL sel)
{ {
CGSize restrainedSize = self.bounds.size; CGSize restrainedSize = self.bounds.size;
UIEdgeInsets sectionInset = UIEdgeInsetsZero; UIEdgeInsets sectionInset = UIEdgeInsetsZero;
if ([self.collectionViewLayout respondsToSelector:@selector(sectionInset)]) { if (_collectionViewLayoutImplementsInsetSection) {
sectionInset = [(UICollectionViewFlowLayout *)self.collectionViewLayout sectionInset]; sectionInset = [(UICollectionViewFlowLayout *)self.collectionViewLayout sectionInset];
} }
if (_implementsInsetSection) { if (_asyncDelegateImplementsInsetSection) {
sectionInset = [_asyncDelegate collectionView:self layout:self.collectionViewLayout insetForSectionAtIndex:indexPath.section]; sectionInset = [_asyncDelegate collectionView:self layout:self.collectionViewLayout insetForSectionAtIndex:indexPath.section];
} }