From 8fa6667d93fe164051f6afab70e134c9bb0b0313 Mon Sep 17 00:00:00 2001 From: Paul Young Date: Tue, 23 Jun 2015 22:57:38 -0700 Subject: [PATCH 1/9] Remove old and add new framework target. --- .../AsyncDisplayKit-iOS.h | 9 +- .../Info.plist | 0 AsyncDisplayKit.xcodeproj/project.pbxproj | 534 +++++++++--------- .../xcschemes/AsyncDisplayKit-iOS.xcscheme | 6 +- 4 files changed, 284 insertions(+), 265 deletions(-) rename {AsyncDisplayKit => AsyncDisplayKit-iOS}/AsyncDisplayKit-iOS.h (60%) rename {AsyncDisplayKit => AsyncDisplayKit-iOS}/Info.plist (100%) diff --git a/AsyncDisplayKit/AsyncDisplayKit-iOS.h b/AsyncDisplayKit-iOS/AsyncDisplayKit-iOS.h similarity index 60% rename from AsyncDisplayKit/AsyncDisplayKit-iOS.h rename to AsyncDisplayKit-iOS/AsyncDisplayKit-iOS.h index 3e2ec7f449..130cb0da8a 100644 --- a/AsyncDisplayKit/AsyncDisplayKit-iOS.h +++ b/AsyncDisplayKit-iOS/AsyncDisplayKit-iOS.h @@ -5,12 +5,15 @@ * 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 //! Project version number for AsyncDisplayKit-iOS. -FOUNDATION_EXPORT double AsyncDisplayKitVersionNumber; +FOUNDATION_EXPORT double AsyncDisplayKit_iOSVersionNumber; //! Project version string for AsyncDisplayKit-iOS. -FOUNDATION_EXPORT const unsigned char AsyncDisplayKitVersionString[]; +FOUNDATION_EXPORT const unsigned char AsyncDisplayKit_iOSVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + -#import \ No newline at end of file diff --git a/AsyncDisplayKit/Info.plist b/AsyncDisplayKit-iOS/Info.plist similarity index 100% rename from AsyncDisplayKit/Info.plist rename to AsyncDisplayKit-iOS/Info.plist diff --git a/AsyncDisplayKit.xcodeproj/project.pbxproj b/AsyncDisplayKit.xcodeproj/project.pbxproj index 41f631ea22..4404af27db 100644 --- a/AsyncDisplayKit.xcodeproj/project.pbxproj +++ b/AsyncDisplayKit.xcodeproj/project.pbxproj @@ -167,6 +167,126 @@ 299DA1A91A828D2900162D41 /* ASBatchContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 299DA1A71A828D2900162D41 /* ASBatchContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; 299DA1AA1A828D2900162D41 /* ASBatchContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 299DA1A81A828D2900162D41 /* ASBatchContext.mm */; }; 29CDC2E21AAE70D000833CA4 /* ASBasicImageDownloaderContextTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29CDC2E11AAE70D000833CA4 /* ASBasicImageDownloaderContextTests.m */; }; + 2C5B66A21B3A796F005926A7 /* AsyncDisplayKit-iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C5B66A11B3A796F005926A7 /* AsyncDisplayKit-iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B66C11B3A7A5C005926A7 /* ASCellNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3B19ABD43F004DAFF1 /* ASCellNode.m */; }; + 2C5B66C21B3A7A5C005926A7 /* ASCollectionView.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC3C4A501A1139C100143C57 /* ASCollectionView.mm */; }; + 2C5B66C31B3A7A5C005926A7 /* ASControlNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09D6195D050800B7D73C /* ASControlNode.m */; }; + 2C5B66C41B3A7A5C005926A7 /* ASDisplayNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09D9195D050800B7D73C /* ASDisplayNode.mm */; }; + 2C5B66C51B3A7A5C005926A7 /* ASDisplayNodeExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09DC195D050800B7D73C /* ASDisplayNodeExtras.mm */; }; + 2C5B66C61B3A7A5C005926A7 /* ASEditableTextNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0587F9BC1A7309ED00AFF0BA /* ASEditableTextNode.mm */; }; + 2C5B66C71B3A7A5C005926A7 /* ASImageNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09DE195D050800B7D73C /* ASImageNode.mm */; }; + 2C5B66C81B3A7A5C005926A7 /* ASMultiplexImageNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0516FA3F1A1563D200B4EBED /* ASMultiplexImageNode.mm */; }; + 2C5B66C91B3A7A5C005926A7 /* ASNetworkImageNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 055B9FA71A1C154B00035D6D /* ASNetworkImageNode.mm */; }; + 2C5B66CA1B3A7A5C005926A7 /* ASScrollNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D785F6611A74327E00291744 /* ASScrollNode.m */; }; + 2C5B66CB1B3A7A5C005926A7 /* ASTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3319ABD3E3004DAFF1 /* ASTableView.mm */; }; + 2C5B66CC1B3A7A5C005926A7 /* ASTextNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E0195D050800B7D73C /* ASTextNode.mm */; }; + 2C5B66CD1B3A7A5C005926A7 /* _ASDisplayLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E3195D050800B7D73C /* _ASDisplayLayer.mm */; }; + 2C5B66CE1B3A7A5C005926A7 /* _ASDisplayView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E5195D050800B7D73C /* _ASDisplayView.mm */; }; + 2C5B66CF1B3A7A5C005926A7 /* ASAbstractLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E181B37339C007741D0 /* ASAbstractLayoutController.mm */; }; + 2C5B66D01B3A7A5C005926A7 /* ASBasicImageDownloader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 054963481A1EA066000F8E56 /* ASBasicImageDownloader.mm */; }; + 2C5B66D11B3A7A5C005926A7 /* ASBatchContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 299DA1A81A828D2900162D41 /* ASBatchContext.mm */; }; + 2C5B66D21B3A7A5C005926A7 /* ASCollectionViewLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E1C1B373A2C007741D0 /* ASCollectionViewLayoutController.mm */; }; + 2C5B66D31B3A7A5C005926A7 /* ASDataController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4640521A1A3F83C40061C0BA /* ASDataController.mm */; }; + 2C5B66D41B3A7A5C005926A7 /* ASDealloc2MainObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 05A6D05919D0EB64002DD95E /* ASDealloc2MainObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 2C5B66D51B3A7A5C005926A7 /* ASFlowLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4640521C1A3F83C40061C0BA /* ASFlowLayoutController.mm */; }; + 2C5B66D61B3A7A5C005926A7 /* ASHighlightOverlayLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E7195D050800B7D73C /* ASHighlightOverlayLayer.mm */; }; + 2C5B66D71B3A7A5C005926A7 /* ASMultidimensionalArrayUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4640521F1A3F83C40061C0BA /* ASMultidimensionalArrayUtils.mm */; }; + 2C5B66D81B3A7A5C005926A7 /* ASMutableAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E9195D050800B7D73C /* ASMutableAttributedStringBuilder.m */; }; + 2C5B66D91B3A7A5C005926A7 /* ASRangeController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3719ABD413004DAFF1 /* ASRangeController.mm */; }; + 2C5B66DA1B3A7A5C005926A7 /* ASRangeHandlerPreload.mm in Sources */ = {isa = PBXBuildFile; fileRef = 292C599B1A956527007E5DD6 /* ASRangeHandlerPreload.mm */; }; + 2C5B66DB1B3A7A5C005926A7 /* ASRangeHandlerRender.mm in Sources */ = {isa = PBXBuildFile; fileRef = 292C599E1A956527007E5DD6 /* ASRangeHandlerRender.mm */; }; + 2C5B66DC1B3A7A5C005926A7 /* ASScrollDirection.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E111B371BD7007741D0 /* ASScrollDirection.m */; }; + 2C5B66DD1B3A7A5C005926A7 /* ASTextNodeCoreTextAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09EB195D050800B7D73C /* ASTextNodeCoreTextAdditions.m */; }; + 2C5B66DE1B3A7A5C005926A7 /* ASTextNodeRenderer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09ED195D050800B7D73C /* ASTextNodeRenderer.mm */; }; + 2C5B66DF1B3A7A5C005926A7 /* ASTextNodeShadower.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09EF195D050800B7D73C /* ASTextNodeShadower.m */; }; + 2C5B66E01B3A7A5C005926A7 /* ASTextNodeTextKitHelpers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F1195D050800B7D73C /* ASTextNodeTextKitHelpers.mm */; }; + 2C5B66E11B3A7A5C005926A7 /* ASTextNodeWordKerner.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F4195D050800B7D73C /* ASTextNodeWordKerner.m */; }; + 2C5B66E21B3A7A5C005926A7 /* CGRect+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E201B376416007741D0 /* CGRect+ASConvenience.m */; }; + 2C5B66E31B3A7A5C005926A7 /* NSMutableAttributedString+TextKitAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F6195D050800B7D73C /* NSMutableAttributedString+TextKitAdditions.m */; }; + 2C5B66E41B3A7A5C005926A7 /* _ASAsyncTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F9195D050800B7D73C /* _ASAsyncTransaction.m */; }; + 2C5B66E51B3A7A5C005926A7 /* _ASAsyncTransactionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09FC195D050800B7D73C /* _ASAsyncTransactionContainer.m */; }; + 2C5B66E61B3A7A5C005926A7 /* _ASAsyncTransactionGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09FE195D050800B7D73C /* _ASAsyncTransactionGroup.m */; }; + 2C5B66E71B3A7A5C005926A7 /* UICollectionViewLayout+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 205F0E0E1B371875007741D0 /* UICollectionViewLayout+ASConvenience.m */; }; + 2C5B66E81B3A7A5C005926A7 /* UIView+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A00195D050800B7D73C /* UIView+ASConvenience.m */; }; + 2C5B66E91B3A7A5C005926A7 /* ASBatchFetching.m in Sources */ = {isa = PBXBuildFile; fileRef = 296A0A2D1A9516B2005ACEAA /* ASBatchFetching.m */; }; + 2C5B66EA1B3A7A5C005926A7 /* _ASCoreAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A04195D050800B7D73C /* _ASCoreAnimationExtras.mm */; }; + 2C5B66EB1B3A7A5C005926A7 /* _ASPendingState.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A06195D050800B7D73C /* _ASPendingState.m */; }; + 2C5B66EC1B3A7A5C005926A7 /* ASDisplayNode+AsyncDisplay.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A08195D050800B7D73C /* ASDisplayNode+AsyncDisplay.mm */; }; + 2C5B66ED1B3A7A5C005926A7 /* ASDisplayNode+DebugTiming.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A0A195D050800B7D73C /* ASDisplayNode+DebugTiming.mm */; }; + 2C5B66EE1B3A7A5C005926A7 /* ASDisplayNode+UIViewBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A0B195D050800B7D73C /* ASDisplayNode+UIViewBridge.mm */; }; + 2C5B66EF1B3A7A5C005926A7 /* ASImageNode+CGExtras.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A0E195D050800B7D73C /* ASImageNode+CGExtras.m */; }; + 2C5B66F01B3A7A5C005926A7 /* ASSentinel.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A11195D050800B7D73C /* ASSentinel.m */; }; + 2C5B66F11B3A7A95005926A7 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051943121A1575630030A7D0 /* AssetsLibrary.framework */; }; + 2C5B66F21B3A7A95005926A7 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051943141A1575670030A7D0 /* Photos.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 2C5B66F31B3A7ACF005926A7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058D09AF195D04C000B7D73C /* Foundation.framework */; }; + 2C5B66F41B3A7B1D005926A7 /* ASEqualityHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 1950C4481A3BB5C1005C8279 /* ASEqualityHelpers.h */; }; + 2C5B66F51B3A7B2E005926A7 /* ASMultidimensionalArrayUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4640521E1A3F83C40061C0BA /* ASMultidimensionalArrayUtils.h */; }; + 2C5B66F61B3A7B3D005926A7 /* CGRect+ASConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E1F1B376416007741D0 /* CGRect+ASConvenience.h */; }; + 2C5B66F71B3A7B5D005926A7 /* ASBatchFetching.h in Headers */ = {isa = PBXBuildFile; fileRef = 296A0A2C1A9516B2005ACEAA /* ASBatchFetching.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B66F81B3A7B82005926A7 /* _ASDisplayLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E2195D050800B7D73C /* _ASDisplayLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B66F91B3A7B82005926A7 /* _ASDisplayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E4195D050800B7D73C /* _ASDisplayView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B66FA1B3A7B82005926A7 /* _ASAsyncTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F8195D050800B7D73C /* _ASAsyncTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B66FB1B3A7B82005926A7 /* _ASAsyncTransactionContainer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FA195D050800B7D73C /* _ASAsyncTransactionContainer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B66FC1B3A7B82005926A7 /* _ASAsyncTransactionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FB195D050800B7D73C /* _ASAsyncTransactionContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B66FD1B3A7B82005926A7 /* _ASAsyncTransactionGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FD195D050800B7D73C /* _ASAsyncTransactionGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B66FE1B3A7B82005926A7 /* _AS-objc-internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A02195D050800B7D73C /* _AS-objc-internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B66FF1B3A7B82005926A7 /* _ASCoreAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A03195D050800B7D73C /* _ASCoreAnimationExtras.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B67001B3A7B82005926A7 /* _ASPendingState.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A05195D050800B7D73C /* _ASPendingState.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B67011B3A7B82005926A7 /* _ASScopeTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A07195D050800B7D73C /* _ASScopeTimer.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B67021B3A7BC7005926A7 /* ASCellNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 055F1A3A19ABD43F004DAFF1 /* ASCellNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67031B3A7BC7005926A7 /* ASCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3C4A4F1A1139C100143C57 /* ASCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67041B3A7BC7005926A7 /* ASCollectionViewProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3C4A531A113EEC00143C57 /* ASCollectionViewProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67051B3A7BC7005926A7 /* ASControlNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09D5195D050800B7D73C /* ASControlNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67061B3A7BC7005926A7 /* ASControlNode+Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09D7195D050800B7D73C /* ASControlNode+Subclasses.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67071B3A7BC7005926A7 /* ASDisplayNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09D8195D050800B7D73C /* ASDisplayNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67081B3A7BC7005926A7 /* ASDisplayNode+Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DA195D050800B7D73C /* ASDisplayNode+Subclasses.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67091B3A7BC7005926A7 /* ASDisplayNodeExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DB195D050800B7D73C /* ASDisplayNodeExtras.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B670A1B3A7BC7005926A7 /* ASEditableTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0587F9BB1A7309ED00AFF0BA /* ASEditableTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B670B1B3A7BC7005926A7 /* ASImageNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DD195D050800B7D73C /* ASImageNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B670C1B3A7BC7005926A7 /* ASMultiplexImageNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0516FA3E1A1563D200B4EBED /* ASMultiplexImageNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B670D1B3A7BC7005926A7 /* ASNetworkImageNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 055B9FA61A1C154B00035D6D /* ASNetworkImageNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B670E1B3A7BC7005926A7 /* ASScrollNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D785F6601A74327E00291744 /* ASScrollNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B670F1B3A7BC7005926A7 /* ASTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 055F1A3219ABD3E3004DAFF1 /* ASTableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67101B3A7BC7005926A7 /* ASTableViewProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = 0574D5E119C110610097DC25 /* ASTableViewProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67111B3A7BC7005926A7 /* ASTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DF195D050800B7D73C /* ASTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67121B3A7BC7005926A7 /* AsyncDisplayKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BDC61F51978FEA400E50D21 /* AsyncDisplayKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67131B3A7BC7005926A7 /* ASAbstractLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E171B37339C007741D0 /* ASAbstractLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67141B3A7BC7005926A7 /* ASBasicImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 054963471A1EA066000F8E56 /* ASBasicImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67151B3A7BC7005926A7 /* ASBatchContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 299DA1A71A828D2900162D41 /* ASBatchContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67161B3A7BC7005926A7 /* ASCollectionViewLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E1B1B373A2C007741D0 /* ASCollectionViewLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67171B3A7BC7005926A7 /* ASDataController.h in Headers */ = {isa = PBXBuildFile; fileRef = 464052191A3F83C40061C0BA /* ASDataController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67181B3A7BC7005926A7 /* ASDealloc2MainObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 05A6D05819D0EB64002DD95E /* ASDealloc2MainObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67191B3A7BC7005926A7 /* ASFlowLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4640521B1A3F83C40061C0BA /* ASFlowLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B671A1B3A7BC7005926A7 /* ASHighlightOverlayLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E6195D050800B7D73C /* ASHighlightOverlayLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B671B1B3A7BC7005926A7 /* ASImageProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F20AA31A15733C00DCA68A /* ASImageProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B671C1B3A7BC7005926A7 /* ASLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4640521D1A3F83C40061C0BA /* ASLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B671D1B3A7BC7005926A7 /* ASLayoutRangeType.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C59991A956527007E5DD6 /* ASLayoutRangeType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B671E1B3A7BC7005926A7 /* ASMutableAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E8195D050800B7D73C /* ASMutableAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B671F1B3A7BC7005926A7 /* ASRangeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 055F1A3619ABD413004DAFF1 /* ASRangeController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67201B3A7BC7005926A7 /* ASRangeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C599C1A956527007E5DD6 /* ASRangeHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67211B3A7BC7005926A7 /* ASRangeHandlerPreload.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C599A1A956527007E5DD6 /* ASRangeHandlerPreload.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67221B3A7BC7005926A7 /* ASRangeHandlerRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C599D1A956527007E5DD6 /* ASRangeHandlerRender.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67231B3A7BC7005926A7 /* ASScrollDirection.h in Headers */ = {isa = PBXBuildFile; fileRef = 296A0A311A951715005ACEAA /* ASScrollDirection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67241B3A7BC7005926A7 /* ASTextNodeCoreTextAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09EA195D050800B7D73C /* ASTextNodeCoreTextAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67251B3A7BC7005926A7 /* ASTextNodeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09EC195D050800B7D73C /* ASTextNodeRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67261B3A7BC7005926A7 /* ASTextNodeShadower.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09EE195D050800B7D73C /* ASTextNodeShadower.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67271B3A7BC7005926A7 /* ASTextNodeTextKitHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F0195D050800B7D73C /* ASTextNodeTextKitHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67281B3A7BC7005926A7 /* ASTextNodeTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F2195D050800B7D73C /* ASTextNodeTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67291B3A7BC7005926A7 /* ASTextNodeWordKerner.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F3195D050800B7D73C /* ASTextNodeWordKerner.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B672A1B3A7BC7005926A7 /* ASThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A12195D050800B7D73C /* ASThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B672B1B3A7BC7005926A7 /* NSMutableAttributedString+TextKitAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F5195D050800B7D73C /* NSMutableAttributedString+TextKitAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B672C1B3A7BC7005926A7 /* UICollectionViewLayout+ASConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F0E0D1B371875007741D0 /* UICollectionViewLayout+ASConvenience.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B672D1B3A7BC7005926A7 /* UIView+ASConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FF195D050800B7D73C /* UIView+ASConvenience.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B672E1B3A7BF6005926A7 /* ASBasicImageDownloaderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2967F9E11AB0A4CF0072E4AB /* ASBasicImageDownloaderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B672F1B3A7BF6005926A7 /* ASDisplayNode+DebugTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A09195D050800B7D73C /* ASDisplayNode+DebugTiming.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B67301B3A7BF6005926A7 /* ASDisplayNodeInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A0C195D050800B7D73C /* ASDisplayNodeInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B67311B3A7BF6005926A7 /* ASImageNode+CGExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A0D195D050800B7D73C /* ASImageNode+CGExtras.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B67321B3A7BF6005926A7 /* ASSentinel.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A10195D050800B7D73C /* ASSentinel.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2C5B67331B3A7C4C005926A7 /* ASAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A43195D058D00B7D73C /* ASAssert.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67341B3A7C4C005926A7 /* ASAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 0516FA3A1A15563400B4EBED /* ASAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67351B3A7C4C005926A7 /* ASBaseDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A44195D058D00B7D73C /* ASBaseDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67361B3A7C4C005926A7 /* ASDisplayNodeExtraIvars.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A45195D058D00B7D73C /* ASDisplayNodeExtraIvars.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2C5B67371B3A7C4C005926A7 /* ASLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 0516FA3B1A15563400B4EBED /* ASLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3C9C128519E616EF00E942A0 /* ASTableViewTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9C128419E616EF00E942A0 /* ASTableViewTests.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 464052201A3F83C40061C0BA /* ASDataController.h in Headers */ = {isa = PBXBuildFile; fileRef = 464052191A3F83C40061C0BA /* ASDataController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 464052211A3F83C40061C0BA /* ASDataController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4640521A1A3F83C40061C0BA /* ASDataController.mm */; }; @@ -179,117 +299,6 @@ AC3C4A511A1139C100143C57 /* ASCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3C4A4F1A1139C100143C57 /* ASCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; AC3C4A521A1139C100143C57 /* ASCollectionView.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC3C4A501A1139C100143C57 /* ASCollectionView.mm */; }; AC3C4A541A113EEC00143C57 /* ASCollectionViewProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3C4A531A113EEC00143C57 /* ASCollectionViewProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B31A241E1B0114FD0016AE7A /* AsyncDisplayKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BDC61F51978FEA400E50D21 /* AsyncDisplayKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061DF1B010EDF0018CF92 /* AsyncDisplayKit-iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = B35061DE1B010EDF0018CF92 /* AsyncDisplayKit-iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061F31B010EFD0018CF92 /* ASCellNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 055F1A3A19ABD43F004DAFF1 /* ASCellNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061F41B010EFD0018CF92 /* ASCellNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3B19ABD43F004DAFF1 /* ASCellNode.m */; }; - B35061F51B010EFD0018CF92 /* ASCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3C4A4F1A1139C100143C57 /* ASCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061F61B010EFD0018CF92 /* ASCollectionView.mm in Sources */ = {isa = PBXBuildFile; fileRef = AC3C4A501A1139C100143C57 /* ASCollectionView.mm */; }; - B35061F71B010EFD0018CF92 /* ASCollectionViewProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = AC3C4A531A113EEC00143C57 /* ASCollectionViewProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061F81B010EFD0018CF92 /* ASControlNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09D5195D050800B7D73C /* ASControlNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061F91B010EFD0018CF92 /* ASControlNode.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09D6195D050800B7D73C /* ASControlNode.m */; }; - B35061FA1B010EFD0018CF92 /* ASControlNode+Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09D7195D050800B7D73C /* ASControlNode+Subclasses.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061FB1B010EFD0018CF92 /* ASDisplayNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09D8195D050800B7D73C /* ASDisplayNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061FC1B010EFD0018CF92 /* ASDisplayNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09D9195D050800B7D73C /* ASDisplayNode.mm */; }; - B35061FD1B010EFD0018CF92 /* ASDisplayNode+Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DA195D050800B7D73C /* ASDisplayNode+Subclasses.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061FE1B010EFD0018CF92 /* ASDisplayNodeExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DB195D050800B7D73C /* ASDisplayNodeExtras.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35061FF1B010EFD0018CF92 /* ASDisplayNodeExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09DC195D050800B7D73C /* ASDisplayNodeExtras.mm */; }; - B35062001B010EFD0018CF92 /* ASEditableTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0587F9BB1A7309ED00AFF0BA /* ASEditableTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062011B010EFD0018CF92 /* ASEditableTextNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0587F9BC1A7309ED00AFF0BA /* ASEditableTextNode.mm */; }; - B35062021B010EFD0018CF92 /* ASImageNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DD195D050800B7D73C /* ASImageNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062031B010EFD0018CF92 /* ASImageNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09DE195D050800B7D73C /* ASImageNode.mm */; }; - B35062041B010EFD0018CF92 /* ASMultiplexImageNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0516FA3E1A1563D200B4EBED /* ASMultiplexImageNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062051B010EFD0018CF92 /* ASMultiplexImageNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0516FA3F1A1563D200B4EBED /* ASMultiplexImageNode.mm */; }; - B35062061B010EFD0018CF92 /* ASNetworkImageNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 055B9FA61A1C154B00035D6D /* ASNetworkImageNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062071B010EFD0018CF92 /* ASNetworkImageNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 055B9FA71A1C154B00035D6D /* ASNetworkImageNode.mm */; }; - B35062081B010EFD0018CF92 /* ASScrollNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D785F6601A74327E00291744 /* ASScrollNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062091B010EFD0018CF92 /* ASScrollNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D785F6611A74327E00291744 /* ASScrollNode.m */; }; - B350620A1B010EFD0018CF92 /* ASTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 055F1A3219ABD3E3004DAFF1 /* ASTableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350620B1B010EFD0018CF92 /* ASTableView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3319ABD3E3004DAFF1 /* ASTableView.mm */; }; - B350620C1B010EFD0018CF92 /* ASTableViewProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = 0574D5E119C110610097DC25 /* ASTableViewProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350620D1B010EFD0018CF92 /* ASTextNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09DF195D050800B7D73C /* ASTextNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350620E1B010EFD0018CF92 /* ASTextNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E0195D050800B7D73C /* ASTextNode.mm */; }; - B350620F1B010EFD0018CF92 /* _ASDisplayLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E2195D050800B7D73C /* _ASDisplayLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062101B010EFD0018CF92 /* _ASDisplayLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E3195D050800B7D73C /* _ASDisplayLayer.mm */; }; - B35062111B010EFD0018CF92 /* _ASDisplayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E4195D050800B7D73C /* _ASDisplayView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062121B010EFD0018CF92 /* _ASDisplayView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E5195D050800B7D73C /* _ASDisplayView.mm */; }; - B35062131B010EFD0018CF92 /* ASBasicImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 054963471A1EA066000F8E56 /* ASBasicImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062141B010EFD0018CF92 /* ASBasicImageDownloader.mm in Sources */ = {isa = PBXBuildFile; fileRef = 054963481A1EA066000F8E56 /* ASBasicImageDownloader.mm */; }; - B35062151B010EFD0018CF92 /* ASBatchContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 299DA1A71A828D2900162D41 /* ASBatchContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062161B010EFD0018CF92 /* ASBatchContext.mm in Sources */ = {isa = PBXBuildFile; fileRef = 299DA1A81A828D2900162D41 /* ASBatchContext.mm */; }; - B35062171B010EFD0018CF92 /* ASDataController.h in Headers */ = {isa = PBXBuildFile; fileRef = 464052191A3F83C40061C0BA /* ASDataController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062181B010EFD0018CF92 /* ASDataController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4640521A1A3F83C40061C0BA /* ASDataController.mm */; }; - B35062191B010EFD0018CF92 /* ASDealloc2MainObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 05A6D05819D0EB64002DD95E /* ASDealloc2MainObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350621A1B010EFD0018CF92 /* ASDealloc2MainObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 05A6D05919D0EB64002DD95E /* ASDealloc2MainObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B350621B1B010EFD0018CF92 /* ASFlowLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4640521B1A3F83C40061C0BA /* ASFlowLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350621C1B010EFD0018CF92 /* ASFlowLayoutController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4640521C1A3F83C40061C0BA /* ASFlowLayoutController.mm */; }; - B350621D1B010EFD0018CF92 /* ASHighlightOverlayLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E6195D050800B7D73C /* ASHighlightOverlayLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350621E1B010EFD0018CF92 /* ASHighlightOverlayLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E7195D050800B7D73C /* ASHighlightOverlayLayer.mm */; }; - B350621F1B010EFD0018CF92 /* ASImageProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F20AA31A15733C00DCA68A /* ASImageProtocols.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062201B010EFD0018CF92 /* ASLayoutController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4640521D1A3F83C40061C0BA /* ASLayoutController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062211B010EFD0018CF92 /* ASLayoutRangeType.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C59991A956527007E5DD6 /* ASLayoutRangeType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062221B010EFD0018CF92 /* ASMultidimensionalArrayUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 4640521E1A3F83C40061C0BA /* ASMultidimensionalArrayUtils.h */; }; - B35062231B010EFD0018CF92 /* ASMultidimensionalArrayUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4640521F1A3F83C40061C0BA /* ASMultidimensionalArrayUtils.mm */; }; - B35062241B010EFD0018CF92 /* ASMutableAttributedStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09E8195D050800B7D73C /* ASMutableAttributedStringBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062251B010EFD0018CF92 /* ASMutableAttributedStringBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09E9195D050800B7D73C /* ASMutableAttributedStringBuilder.m */; }; - B35062261B010EFD0018CF92 /* ASRangeController.h in Headers */ = {isa = PBXBuildFile; fileRef = 055F1A3619ABD413004DAFF1 /* ASRangeController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062271B010EFD0018CF92 /* ASRangeController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 055F1A3719ABD413004DAFF1 /* ASRangeController.mm */; }; - B35062281B010EFD0018CF92 /* ASRangeHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C599C1A956527007E5DD6 /* ASRangeHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062291B010EFD0018CF92 /* ASRangeHandlerPreload.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C599A1A956527007E5DD6 /* ASRangeHandlerPreload.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350622A1B010EFD0018CF92 /* ASRangeHandlerPreload.mm in Sources */ = {isa = PBXBuildFile; fileRef = 292C599B1A956527007E5DD6 /* ASRangeHandlerPreload.mm */; }; - B350622B1B010EFD0018CF92 /* ASRangeHandlerRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C599D1A956527007E5DD6 /* ASRangeHandlerRender.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350622C1B010EFD0018CF92 /* ASRangeHandlerRender.mm in Sources */ = {isa = PBXBuildFile; fileRef = 292C599E1A956527007E5DD6 /* ASRangeHandlerRender.mm */; }; - B350622D1B010EFD0018CF92 /* ASScrollDirection.h in Headers */ = {isa = PBXBuildFile; fileRef = 296A0A311A951715005ACEAA /* ASScrollDirection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350622E1B010EFD0018CF92 /* ASTextNodeCoreTextAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09EA195D050800B7D73C /* ASTextNodeCoreTextAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350622F1B010EFD0018CF92 /* ASTextNodeCoreTextAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09EB195D050800B7D73C /* ASTextNodeCoreTextAdditions.m */; }; - B35062301B010EFD0018CF92 /* ASTextNodeRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09EC195D050800B7D73C /* ASTextNodeRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062311B010EFD0018CF92 /* ASTextNodeRenderer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09ED195D050800B7D73C /* ASTextNodeRenderer.mm */; }; - B35062321B010EFD0018CF92 /* ASTextNodeShadower.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09EE195D050800B7D73C /* ASTextNodeShadower.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062331B010EFD0018CF92 /* ASTextNodeShadower.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09EF195D050800B7D73C /* ASTextNodeShadower.m */; }; - B35062341B010EFD0018CF92 /* ASTextNodeTextKitHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F0195D050800B7D73C /* ASTextNodeTextKitHelpers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062351B010EFD0018CF92 /* ASTextNodeTextKitHelpers.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F1195D050800B7D73C /* ASTextNodeTextKitHelpers.mm */; }; - B35062361B010EFD0018CF92 /* ASTextNodeTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F2195D050800B7D73C /* ASTextNodeTypes.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062371B010EFD0018CF92 /* ASTextNodeWordKerner.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F3195D050800B7D73C /* ASTextNodeWordKerner.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062381B010EFD0018CF92 /* ASTextNodeWordKerner.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F4195D050800B7D73C /* ASTextNodeWordKerner.m */; }; - B35062391B010EFD0018CF92 /* ASThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A12195D050800B7D73C /* ASThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350623A1B010EFD0018CF92 /* NSMutableAttributedString+TextKitAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F5195D050800B7D73C /* NSMutableAttributedString+TextKitAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350623B1B010EFD0018CF92 /* NSMutableAttributedString+TextKitAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F6195D050800B7D73C /* NSMutableAttributedString+TextKitAdditions.m */; }; - B350623C1B010EFD0018CF92 /* _ASAsyncTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09F8195D050800B7D73C /* _ASAsyncTransaction.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350623D1B010EFD0018CF92 /* _ASAsyncTransaction.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09F9195D050800B7D73C /* _ASAsyncTransaction.m */; }; - B350623E1B010EFD0018CF92 /* _ASAsyncTransactionContainer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FA195D050800B7D73C /* _ASAsyncTransactionContainer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350623F1B010EFD0018CF92 /* _ASAsyncTransactionContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FB195D050800B7D73C /* _ASAsyncTransactionContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062401B010EFD0018CF92 /* _ASAsyncTransactionContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09FC195D050800B7D73C /* _ASAsyncTransactionContainer.m */; }; - B35062411B010EFD0018CF92 /* _ASAsyncTransactionGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FD195D050800B7D73C /* _ASAsyncTransactionGroup.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062421B010EFD0018CF92 /* _ASAsyncTransactionGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D09FE195D050800B7D73C /* _ASAsyncTransactionGroup.m */; }; - B35062431B010EFD0018CF92 /* UIView+ASConvenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D09FF195D050800B7D73C /* UIView+ASConvenience.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062441B010EFD0018CF92 /* UIView+ASConvenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A00195D050800B7D73C /* UIView+ASConvenience.m */; }; - B35062451B010EFD0018CF92 /* ASBatchFetching.h in Headers */ = {isa = PBXBuildFile; fileRef = 296A0A2C1A9516B2005ACEAA /* ASBatchFetching.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B35062461B010EFD0018CF92 /* ASBasicImageDownloaderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2967F9E11AB0A4CF0072E4AB /* ASBasicImageDownloaderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B35062471B010EFD0018CF92 /* ASBatchFetching.m in Sources */ = {isa = PBXBuildFile; fileRef = 296A0A2D1A9516B2005ACEAA /* ASBatchFetching.m */; }; - B35062481B010EFD0018CF92 /* _AS-objc-internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A02195D050800B7D73C /* _AS-objc-internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B35062491B010EFD0018CF92 /* _ASCoreAnimationExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A03195D050800B7D73C /* _ASCoreAnimationExtras.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B350624A1B010EFD0018CF92 /* _ASCoreAnimationExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A04195D050800B7D73C /* _ASCoreAnimationExtras.mm */; }; - B350624B1B010EFD0018CF92 /* _ASPendingState.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A05195D050800B7D73C /* _ASPendingState.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B350624C1B010EFD0018CF92 /* _ASPendingState.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A06195D050800B7D73C /* _ASPendingState.m */; }; - B350624D1B010EFD0018CF92 /* _ASScopeTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A07195D050800B7D73C /* _ASScopeTimer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B350624E1B010EFD0018CF92 /* ASDisplayNode+AsyncDisplay.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A08195D050800B7D73C /* ASDisplayNode+AsyncDisplay.mm */; }; - B350624F1B010EFD0018CF92 /* ASDisplayNode+DebugTiming.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A09195D050800B7D73C /* ASDisplayNode+DebugTiming.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B35062501B010EFD0018CF92 /* ASDisplayNode+DebugTiming.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A0A195D050800B7D73C /* ASDisplayNode+DebugTiming.mm */; }; - B35062511B010EFD0018CF92 /* ASDisplayNode+UIViewBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A0B195D050800B7D73C /* ASDisplayNode+UIViewBridge.mm */; }; - B35062521B010EFD0018CF92 /* ASDisplayNodeInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A0C195D050800B7D73C /* ASDisplayNodeInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B35062531B010EFD0018CF92 /* ASImageNode+CGExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A0D195D050800B7D73C /* ASImageNode+CGExtras.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B35062541B010EFD0018CF92 /* ASImageNode+CGExtras.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A0E195D050800B7D73C /* ASImageNode+CGExtras.m */; }; - B35062551B010EFD0018CF92 /* ASSentinel.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A10195D050800B7D73C /* ASSentinel.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B35062561B010EFD0018CF92 /* ASSentinel.m in Sources */ = {isa = PBXBuildFile; fileRef = 058D0A11195D050800B7D73C /* ASSentinel.m */; }; - B35062571B010F070018CF92 /* ASAssert.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A43195D058D00B7D73C /* ASAssert.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062581B010F070018CF92 /* ASAvailability.h in Headers */ = {isa = PBXBuildFile; fileRef = 0516FA3A1A15563400B4EBED /* ASAvailability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B35062591B010F070018CF92 /* ASBaseDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A44195D058D00B7D73C /* ASBaseDefines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350625A1B010F070018CF92 /* ASDisplayNodeExtraIvars.h in Headers */ = {isa = PBXBuildFile; fileRef = 058D0A45195D058D00B7D73C /* ASDisplayNodeExtraIvars.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350625B1B010F070018CF92 /* ASEqualityHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 1950C4481A3BB5C1005C8279 /* ASEqualityHelpers.h */; }; - B350625C1B010F070018CF92 /* ASLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 0516FA3B1A15563400B4EBED /* ASLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B350625D1B0111740018CF92 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051943141A1575670030A7D0 /* Photos.framework */; }; - B350625E1B0111780018CF92 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051943121A1575630030A7D0 /* AssetsLibrary.framework */; }; - B350625F1B0111800018CF92 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058D09AF195D04C000B7D73C /* Foundation.framework */; }; D785F6621A74327E00291744 /* ASScrollNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D785F6601A74327E00291744 /* ASScrollNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; D785F6631A74327E00291744 /* ASScrollNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D785F6611A74327E00291744 /* ASScrollNode.m */; }; DB7121BCD50849C498C886FB /* libPods-AsyncDisplayKitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EFA731F0396842FF8AB635EE /* libPods-AsyncDisplayKitTests.a */; }; @@ -464,6 +473,9 @@ 299DA1A71A828D2900162D41 /* ASBatchContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASBatchContext.h; sourceTree = ""; }; 299DA1A81A828D2900162D41 /* ASBatchContext.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASBatchContext.mm; sourceTree = ""; }; 29CDC2E11AAE70D000833CA4 /* ASBasicImageDownloaderContextTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASBasicImageDownloaderContextTests.m; sourceTree = ""; }; + 2C5B669D1B3A796F005926A7 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2C5B66A01B3A796F005926A7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2C5B66A11B3A796F005926A7 /* AsyncDisplayKit-iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AsyncDisplayKit-iOS.h"; sourceTree = ""; }; 3C9C128419E616EF00E942A0 /* ASTableViewTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASTableViewTests.m; sourceTree = ""; }; 464052191A3F83C40061C0BA /* ASDataController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDataController.h; sourceTree = ""; }; 4640521A1A3F83C40061C0BA /* ASDataController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASDataController.mm; sourceTree = ""; }; @@ -476,9 +488,6 @@ AC3C4A4F1A1139C100143C57 /* ASCollectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCollectionView.h; sourceTree = ""; }; AC3C4A501A1139C100143C57 /* ASCollectionView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASCollectionView.mm; sourceTree = ""; }; AC3C4A531A113EEC00143C57 /* ASCollectionViewProtocols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASCollectionViewProtocols.h; sourceTree = ""; }; - B35061DA1B010EDF0018CF92 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B35061DD1B010EDF0018CF92 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B35061DE1B010EDF0018CF92 /* AsyncDisplayKit-iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AsyncDisplayKit-iOS.h"; sourceTree = ""; }; D3779BCFF841AD3EB56537ED /* Pods-AsyncDisplayKitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AsyncDisplayKitTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-AsyncDisplayKitTests/Pods-AsyncDisplayKitTests.release.xcconfig"; sourceTree = ""; }; D785F6601A74327E00291744 /* ASScrollNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASScrollNode.h; sourceTree = ""; }; D785F6611A74327E00291744 /* ASScrollNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASScrollNode.m; sourceTree = ""; }; @@ -518,13 +527,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B35061D61B010EDF0018CF92 /* Frameworks */ = { + 2C5B66991B3A796F005926A7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B350625F1B0111800018CF92 /* Foundation.framework in Frameworks */, - B350625E1B0111780018CF92 /* AssetsLibrary.framework in Frameworks */, - B350625D1B0111740018CF92 /* Photos.framework in Frameworks */, + 2C5B66F11B3A7A95005926A7 /* AssetsLibrary.framework in Frameworks */, + 2C5B66F31B3A7ACF005926A7 /* Foundation.framework in Frameworks */, + 2C5B66F21B3A7A95005926A7 /* Photos.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -557,7 +566,7 @@ children = ( 058D09B1195D04C000B7D73C /* AsyncDisplayKit */, 058D09C5195D04C000B7D73C /* AsyncDisplayKitTests */, - B35061DB1B010EDF0018CF92 /* AsyncDisplayKit-iOS */, + 2C5B669E1B3A796F005926A7 /* AsyncDisplayKit-iOS */, 058D09AE195D04C000B7D73C /* Frameworks */, 058D09AD195D04C000B7D73C /* Products */, FD40E2760492F0CAAEAD552D /* Pods */, @@ -570,7 +579,7 @@ 058D09AC195D04C000B7D73C /* libAsyncDisplayKit.a */, 058D09BC195D04C000B7D73C /* AsyncDisplayKitTests.xctest */, 057D02BF1AC0A66700C7AC3C /* AsyncDisplayKitTestHost.app */, - B35061DA1B010EDF0018CF92 /* AsyncDisplayKit.framework */, + 2C5B669D1B3A796F005926A7 /* AsyncDisplayKit.framework */, ); name = Products; sourceTree = ""; @@ -791,20 +800,19 @@ path = Base; sourceTree = SOURCE_ROOT; }; - B35061DB1B010EDF0018CF92 /* AsyncDisplayKit-iOS */ = { + 2C5B669E1B3A796F005926A7 /* AsyncDisplayKit-iOS */ = { isa = PBXGroup; children = ( - B35061DE1B010EDF0018CF92 /* AsyncDisplayKit-iOS.h */, - B35061DC1B010EDF0018CF92 /* Supporting Files */, + 2C5B66A11B3A796F005926A7 /* AsyncDisplayKit-iOS.h */, + 2C5B669F1B3A796F005926A7 /* Supporting Files */, ); - name = "AsyncDisplayKit-iOS"; - path = AsyncDisplayKit; + path = "AsyncDisplayKit-iOS"; sourceTree = ""; }; - B35061DC1B010EDF0018CF92 /* Supporting Files */ = { + 2C5B669F1B3A796F005926A7 /* Supporting Files */ = { isa = PBXGroup; children = ( - B35061DD1B010EDF0018CF92 /* Info.plist */, + 2C5B66A01B3A796F005926A7 /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; @@ -922,75 +930,79 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B35061D71B010EDF0018CF92 /* Headers */ = { + 2C5B669A1B3A796F005926A7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B35062321B010EFD0018CF92 /* ASTextNodeShadower.h in Headers */, - B35062431B010EFD0018CF92 /* UIView+ASConvenience.h in Headers */, - B31A241E1B0114FD0016AE7A /* AsyncDisplayKit.h in Headers */, - B350622D1B010EFD0018CF92 /* ASScrollDirection.h in Headers */, - B35061FB1B010EFD0018CF92 /* ASDisplayNode.h in Headers */, - B35062361B010EFD0018CF92 /* ASTextNodeTypes.h in Headers */, - B35062341B010EFD0018CF92 /* ASTextNodeTextKitHelpers.h in Headers */, - B35061FA1B010EFD0018CF92 /* ASControlNode+Subclasses.h in Headers */, - B35062371B010EFD0018CF92 /* ASTextNodeWordKerner.h in Headers */, - B35062261B010EFD0018CF92 /* ASRangeController.h in Headers */, - B35062111B010EFD0018CF92 /* _ASDisplayView.h in Headers */, - B35061F81B010EFD0018CF92 /* ASControlNode.h in Headers */, - B35062281B010EFD0018CF92 /* ASRangeHandler.h in Headers */, - B35061FD1B010EFD0018CF92 /* ASDisplayNode+Subclasses.h in Headers */, - B35062491B010EFD0018CF92 /* _ASCoreAnimationExtras.h in Headers */, - B35061F31B010EFD0018CF92 /* ASCellNode.h in Headers */, - B35062201B010EFD0018CF92 /* ASLayoutController.h in Headers */, - B35062571B010F070018CF92 /* ASAssert.h in Headers */, - B35062411B010EFD0018CF92 /* _ASAsyncTransactionGroup.h in Headers */, - B350623C1B010EFD0018CF92 /* _ASAsyncTransaction.h in Headers */, - B350625C1B010F070018CF92 /* ASLog.h in Headers */, - B35062551B010EFD0018CF92 /* ASSentinel.h in Headers */, - B350624B1B010EFD0018CF92 /* _ASPendingState.h in Headers */, - B35062391B010EFD0018CF92 /* ASThread.h in Headers */, - B35062131B010EFD0018CF92 /* ASBasicImageDownloader.h in Headers */, - B35062221B010EFD0018CF92 /* ASMultidimensionalArrayUtils.h in Headers */, - B350625B1B010F070018CF92 /* ASEqualityHelpers.h in Headers */, - B35061F71B010EFD0018CF92 /* ASCollectionViewProtocols.h in Headers */, - B35062241B010EFD0018CF92 /* ASMutableAttributedStringBuilder.h in Headers */, - B350621D1B010EFD0018CF92 /* ASHighlightOverlayLayer.h in Headers */, - B35062171B010EFD0018CF92 /* ASDataController.h in Headers */, - B350625A1B010F070018CF92 /* ASDisplayNodeExtraIvars.h in Headers */, - B350621F1B010EFD0018CF92 /* ASImageProtocols.h in Headers */, - B35061DF1B010EDF0018CF92 /* AsyncDisplayKit-iOS.h in Headers */, - B350620A1B010EFD0018CF92 /* ASTableView.h in Headers */, - B35062451B010EFD0018CF92 /* ASBatchFetching.h in Headers */, - B350620C1B010EFD0018CF92 /* ASTableViewProtocols.h in Headers */, - B35062481B010EFD0018CF92 /* _AS-objc-internal.h in Headers */, - B350623F1B010EFD0018CF92 /* _ASAsyncTransactionContainer.h in Headers */, - B35062081B010EFD0018CF92 /* ASScrollNode.h in Headers */, - B35061F51B010EFD0018CF92 /* ASCollectionView.h in Headers */, - B35062581B010F070018CF92 /* ASAvailability.h in Headers */, - B35062461B010EFD0018CF92 /* ASBasicImageDownloaderInternal.h in Headers */, - B350622B1B010EFD0018CF92 /* ASRangeHandlerRender.h in Headers */, - B350622E1B010EFD0018CF92 /* ASTextNodeCoreTextAdditions.h in Headers */, - B35062061B010EFD0018CF92 /* ASNetworkImageNode.h in Headers */, - B350624D1B010EFD0018CF92 /* _ASScopeTimer.h in Headers */, - B350624F1B010EFD0018CF92 /* ASDisplayNode+DebugTiming.h in Headers */, - B35062211B010EFD0018CF92 /* ASLayoutRangeType.h in Headers */, - B35062521B010EFD0018CF92 /* ASDisplayNodeInternal.h in Headers */, - B35061FE1B010EFD0018CF92 /* ASDisplayNodeExtras.h in Headers */, - B35062041B010EFD0018CF92 /* ASMultiplexImageNode.h in Headers */, - B35062021B010EFD0018CF92 /* ASImageNode.h in Headers */, - B35062301B010EFD0018CF92 /* ASTextNodeRenderer.h in Headers */, - B350620D1B010EFD0018CF92 /* ASTextNode.h in Headers */, - B35062151B010EFD0018CF92 /* ASBatchContext.h in Headers */, - B350621B1B010EFD0018CF92 /* ASFlowLayoutController.h in Headers */, - B35062291B010EFD0018CF92 /* ASRangeHandlerPreload.h in Headers */, - B35062001B010EFD0018CF92 /* ASEditableTextNode.h in Headers */, - B350623A1B010EFD0018CF92 /* NSMutableAttributedString+TextKitAdditions.h in Headers */, - B350623E1B010EFD0018CF92 /* _ASAsyncTransactionContainer+Private.h in Headers */, - B35062591B010F070018CF92 /* ASBaseDefines.h in Headers */, - B35062191B010EFD0018CF92 /* ASDealloc2MainObject.h in Headers */, - B350620F1B010EFD0018CF92 /* _ASDisplayLayer.h in Headers */, - B35062531B010EFD0018CF92 /* ASImageNode+CGExtras.h in Headers */, + 2C5B66FB1B3A7B82005926A7 /* _ASAsyncTransactionContainer+Private.h in Headers */, + 2C5B66FC1B3A7B82005926A7 /* _ASAsyncTransactionContainer.h in Headers */, + 2C5B66FD1B3A7B82005926A7 /* _ASAsyncTransactionGroup.h in Headers */, + 2C5B66F81B3A7B82005926A7 /* _ASDisplayLayer.h in Headers */, + 2C5B66F91B3A7B82005926A7 /* _ASDisplayView.h in Headers */, + 2C5B66FA1B3A7B82005926A7 /* _ASAsyncTransaction.h in Headers */, + 2C5B66A21B3A796F005926A7 /* AsyncDisplayKit-iOS.h in Headers */, + 2C5B67021B3A7BC7005926A7 /* ASCellNode.h in Headers */, + 2C5B67031B3A7BC7005926A7 /* ASCollectionView.h in Headers */, + 2C5B67041B3A7BC7005926A7 /* ASCollectionViewProtocols.h in Headers */, + 2C5B67051B3A7BC7005926A7 /* ASControlNode.h in Headers */, + 2C5B67061B3A7BC7005926A7 /* ASControlNode+Subclasses.h in Headers */, + 2C5B67071B3A7BC7005926A7 /* ASDisplayNode.h in Headers */, + 2C5B67081B3A7BC7005926A7 /* ASDisplayNode+Subclasses.h in Headers */, + 2C5B67091B3A7BC7005926A7 /* ASDisplayNodeExtras.h in Headers */, + 2C5B670A1B3A7BC7005926A7 /* ASEditableTextNode.h in Headers */, + 2C5B670B1B3A7BC7005926A7 /* ASImageNode.h in Headers */, + 2C5B670C1B3A7BC7005926A7 /* ASMultiplexImageNode.h in Headers */, + 2C5B670D1B3A7BC7005926A7 /* ASNetworkImageNode.h in Headers */, + 2C5B670E1B3A7BC7005926A7 /* ASScrollNode.h in Headers */, + 2C5B670F1B3A7BC7005926A7 /* ASTableView.h in Headers */, + 2C5B67101B3A7BC7005926A7 /* ASTableViewProtocols.h in Headers */, + 2C5B67111B3A7BC7005926A7 /* ASTextNode.h in Headers */, + 2C5B67121B3A7BC7005926A7 /* AsyncDisplayKit.h in Headers */, + 2C5B67131B3A7BC7005926A7 /* ASAbstractLayoutController.h in Headers */, + 2C5B67141B3A7BC7005926A7 /* ASBasicImageDownloader.h in Headers */, + 2C5B67151B3A7BC7005926A7 /* ASBatchContext.h in Headers */, + 2C5B67161B3A7BC7005926A7 /* ASCollectionViewLayoutController.h in Headers */, + 2C5B67171B3A7BC7005926A7 /* ASDataController.h in Headers */, + 2C5B67181B3A7BC7005926A7 /* ASDealloc2MainObject.h in Headers */, + 2C5B67191B3A7BC7005926A7 /* ASFlowLayoutController.h in Headers */, + 2C5B671A1B3A7BC7005926A7 /* ASHighlightOverlayLayer.h in Headers */, + 2C5B671B1B3A7BC7005926A7 /* ASImageProtocols.h in Headers */, + 2C5B671C1B3A7BC7005926A7 /* ASLayoutController.h in Headers */, + 2C5B671D1B3A7BC7005926A7 /* ASLayoutRangeType.h in Headers */, + 2C5B671E1B3A7BC7005926A7 /* ASMutableAttributedStringBuilder.h in Headers */, + 2C5B671F1B3A7BC7005926A7 /* ASRangeController.h in Headers */, + 2C5B67201B3A7BC7005926A7 /* ASRangeHandler.h in Headers */, + 2C5B67211B3A7BC7005926A7 /* ASRangeHandlerPreload.h in Headers */, + 2C5B67221B3A7BC7005926A7 /* ASRangeHandlerRender.h in Headers */, + 2C5B67231B3A7BC7005926A7 /* ASScrollDirection.h in Headers */, + 2C5B67241B3A7BC7005926A7 /* ASTextNodeCoreTextAdditions.h in Headers */, + 2C5B67251B3A7BC7005926A7 /* ASTextNodeRenderer.h in Headers */, + 2C5B67261B3A7BC7005926A7 /* ASTextNodeShadower.h in Headers */, + 2C5B67271B3A7BC7005926A7 /* ASTextNodeTextKitHelpers.h in Headers */, + 2C5B67281B3A7BC7005926A7 /* ASTextNodeTypes.h in Headers */, + 2C5B67291B3A7BC7005926A7 /* ASTextNodeWordKerner.h in Headers */, + 2C5B672A1B3A7BC7005926A7 /* ASThread.h in Headers */, + 2C5B672B1B3A7BC7005926A7 /* NSMutableAttributedString+TextKitAdditions.h in Headers */, + 2C5B672C1B3A7BC7005926A7 /* UICollectionViewLayout+ASConvenience.h in Headers */, + 2C5B672D1B3A7BC7005926A7 /* UIView+ASConvenience.h in Headers */, + 2C5B67331B3A7C4C005926A7 /* ASAssert.h in Headers */, + 2C5B67341B3A7C4C005926A7 /* ASAvailability.h in Headers */, + 2C5B67351B3A7C4C005926A7 /* ASBaseDefines.h in Headers */, + 2C5B67361B3A7C4C005926A7 /* ASDisplayNodeExtraIvars.h in Headers */, + 2C5B67371B3A7C4C005926A7 /* ASLog.h in Headers */, + 2C5B66F71B3A7B5D005926A7 /* ASBatchFetching.h in Headers */, + 2C5B66FE1B3A7B82005926A7 /* _AS-objc-internal.h in Headers */, + 2C5B66FF1B3A7B82005926A7 /* _ASCoreAnimationExtras.h in Headers */, + 2C5B67001B3A7B82005926A7 /* _ASPendingState.h in Headers */, + 2C5B67011B3A7B82005926A7 /* _ASScopeTimer.h in Headers */, + 2C5B672E1B3A7BF6005926A7 /* ASBasicImageDownloaderInternal.h in Headers */, + 2C5B672F1B3A7BF6005926A7 /* ASDisplayNode+DebugTiming.h in Headers */, + 2C5B67301B3A7BF6005926A7 /* ASDisplayNodeInternal.h in Headers */, + 2C5B67311B3A7BF6005926A7 /* ASImageNode+CGExtras.h in Headers */, + 2C5B67321B3A7BF6005926A7 /* ASSentinel.h in Headers */, + 2C5B66F41B3A7B1D005926A7 /* ASEqualityHelpers.h in Headers */, + 2C5B66F51B3A7B2E005926A7 /* ASMultidimensionalArrayUtils.h in Headers */, + 2C5B66F61B3A7B3D005926A7 /* CGRect+ASConvenience.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1053,22 +1065,22 @@ productReference = 058D09BC195D04C000B7D73C /* AsyncDisplayKitTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - B35061D91B010EDF0018CF92 /* AsyncDisplayKit-iOS */ = { + 2C5B669C1B3A796F005926A7 /* AsyncDisplayKit-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = B35061ED1B010EDF0018CF92 /* Build configuration list for PBXNativeTarget "AsyncDisplayKit-iOS" */; + buildConfigurationList = 2C5B66B01B3A796F005926A7 /* Build configuration list for PBXNativeTarget "AsyncDisplayKit-iOS" */; buildPhases = ( - B35061D51B010EDF0018CF92 /* Sources */, - B35061D61B010EDF0018CF92 /* Frameworks */, - B35061D71B010EDF0018CF92 /* Headers */, - B35061D81B010EDF0018CF92 /* Resources */, + 2C5B66981B3A796F005926A7 /* Sources */, + 2C5B66991B3A796F005926A7 /* Frameworks */, + 2C5B669A1B3A796F005926A7 /* Headers */, + 2C5B669B1B3A796F005926A7 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = "AsyncDisplayKit-iOS"; - productName = AsyncDisplayKit; - productReference = B35061DA1B010EDF0018CF92 /* AsyncDisplayKit.framework */; + productName = "AsyncDisplayKit-iOS"; + productReference = 2C5B669D1B3A796F005926A7 /* AsyncDisplayKit.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -1086,8 +1098,8 @@ 058D09BB195D04C000B7D73C = { TestTargetID = 057D02BE1AC0A66700C7AC3C; }; - B35061D91B010EDF0018CF92 = { - CreatedOnToolsVersion = 6.3.1; + 2C5B669C1B3A796F005926A7 = { + CreatedOnToolsVersion = 6.3.2; }; }; }; @@ -1107,7 +1119,7 @@ 058D09AB195D04C000B7D73C /* AsyncDisplayKit */, 058D09BB195D04C000B7D73C /* AsyncDisplayKitTests */, 057D02BE1AC0A66700C7AC3C /* AsyncDisplayKitTestHost */, - B35061D91B010EDF0018CF92 /* AsyncDisplayKit-iOS */, + 2C5B669C1B3A796F005926A7 /* AsyncDisplayKit-iOS */, ); }; /* End PBXProject section */ @@ -1130,7 +1142,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B35061D81B010EDF0018CF92 /* Resources */ = { + 2C5B669B1B3A796F005926A7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -1262,53 +1274,58 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B35061D51B010EDF0018CF92 /* Sources */ = { + 2C5B66981B3A796F005926A7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B350623B1B010EFD0018CF92 /* NSMutableAttributedString+TextKitAdditions.m in Sources */, - B35062401B010EFD0018CF92 /* _ASAsyncTransactionContainer.m in Sources */, - B35062311B010EFD0018CF92 /* ASTextNodeRenderer.mm in Sources */, - B35062051B010EFD0018CF92 /* ASMultiplexImageNode.mm in Sources */, - B35061FC1B010EFD0018CF92 /* ASDisplayNode.mm in Sources */, - B35062181B010EFD0018CF92 /* ASDataController.mm in Sources */, - B35062501B010EFD0018CF92 /* ASDisplayNode+DebugTiming.mm in Sources */, - B35062471B010EFD0018CF92 /* ASBatchFetching.m in Sources */, - B350624E1B010EFD0018CF92 /* ASDisplayNode+AsyncDisplay.mm in Sources */, - B35061F61B010EFD0018CF92 /* ASCollectionView.mm in Sources */, - B350620B1B010EFD0018CF92 /* ASTableView.mm in Sources */, - B350623D1B010EFD0018CF92 /* _ASAsyncTransaction.m in Sources */, - B35062161B010EFD0018CF92 /* ASBatchContext.mm in Sources */, - B350620E1B010EFD0018CF92 /* ASTextNode.mm in Sources */, - B35062141B010EFD0018CF92 /* ASBasicImageDownloader.mm in Sources */, - B350621C1B010EFD0018CF92 /* ASFlowLayoutController.mm in Sources */, - B35062231B010EFD0018CF92 /* ASMultidimensionalArrayUtils.mm in Sources */, - B350621E1B010EFD0018CF92 /* ASHighlightOverlayLayer.mm in Sources */, - B35062271B010EFD0018CF92 /* ASRangeController.mm in Sources */, - B35061F91B010EFD0018CF92 /* ASControlNode.m in Sources */, - B35061F41B010EFD0018CF92 /* ASCellNode.m in Sources */, - B35062561B010EFD0018CF92 /* ASSentinel.m in Sources */, - B350624A1B010EFD0018CF92 /* _ASCoreAnimationExtras.mm in Sources */, - B35062071B010EFD0018CF92 /* ASNetworkImageNode.mm in Sources */, - B35062011B010EFD0018CF92 /* ASEditableTextNode.mm in Sources */, - B35062441B010EFD0018CF92 /* UIView+ASConvenience.m in Sources */, - B350622F1B010EFD0018CF92 /* ASTextNodeCoreTextAdditions.m in Sources */, - B35062031B010EFD0018CF92 /* ASImageNode.mm in Sources */, - B35062091B010EFD0018CF92 /* ASScrollNode.m in Sources */, - B35062251B010EFD0018CF92 /* ASMutableAttributedStringBuilder.m in Sources */, - B35062381B010EFD0018CF92 /* ASTextNodeWordKerner.m in Sources */, - B35062101B010EFD0018CF92 /* _ASDisplayLayer.mm in Sources */, - B35062351B010EFD0018CF92 /* ASTextNodeTextKitHelpers.mm in Sources */, - B35062421B010EFD0018CF92 /* _ASAsyncTransactionGroup.m in Sources */, - B35061FF1B010EFD0018CF92 /* ASDisplayNodeExtras.mm in Sources */, - B35062121B010EFD0018CF92 /* _ASDisplayView.mm in Sources */, - B350624C1B010EFD0018CF92 /* _ASPendingState.m in Sources */, - B35062541B010EFD0018CF92 /* ASImageNode+CGExtras.m in Sources */, - B350622C1B010EFD0018CF92 /* ASRangeHandlerRender.mm in Sources */, - B350622A1B010EFD0018CF92 /* ASRangeHandlerPreload.mm in Sources */, - B35062511B010EFD0018CF92 /* ASDisplayNode+UIViewBridge.mm in Sources */, - B350621A1B010EFD0018CF92 /* ASDealloc2MainObject.m in Sources */, - B35062331B010EFD0018CF92 /* ASTextNodeShadower.m in Sources */, + 2C5B66C11B3A7A5C005926A7 /* ASCellNode.m in Sources */, + 2C5B66C21B3A7A5C005926A7 /* ASCollectionView.mm in Sources */, + 2C5B66C31B3A7A5C005926A7 /* ASControlNode.m in Sources */, + 2C5B66C41B3A7A5C005926A7 /* ASDisplayNode.mm in Sources */, + 2C5B66C51B3A7A5C005926A7 /* ASDisplayNodeExtras.mm in Sources */, + 2C5B66C61B3A7A5C005926A7 /* ASEditableTextNode.mm in Sources */, + 2C5B66C71B3A7A5C005926A7 /* ASImageNode.mm in Sources */, + 2C5B66C81B3A7A5C005926A7 /* ASMultiplexImageNode.mm in Sources */, + 2C5B66C91B3A7A5C005926A7 /* ASNetworkImageNode.mm in Sources */, + 2C5B66CA1B3A7A5C005926A7 /* ASScrollNode.m in Sources */, + 2C5B66CB1B3A7A5C005926A7 /* ASTableView.mm in Sources */, + 2C5B66CC1B3A7A5C005926A7 /* ASTextNode.mm in Sources */, + 2C5B66CD1B3A7A5C005926A7 /* _ASDisplayLayer.mm in Sources */, + 2C5B66CE1B3A7A5C005926A7 /* _ASDisplayView.mm in Sources */, + 2C5B66CF1B3A7A5C005926A7 /* ASAbstractLayoutController.mm in Sources */, + 2C5B66D01B3A7A5C005926A7 /* ASBasicImageDownloader.mm in Sources */, + 2C5B66D11B3A7A5C005926A7 /* ASBatchContext.mm in Sources */, + 2C5B66D21B3A7A5C005926A7 /* ASCollectionViewLayoutController.mm in Sources */, + 2C5B66D31B3A7A5C005926A7 /* ASDataController.mm in Sources */, + 2C5B66D41B3A7A5C005926A7 /* ASDealloc2MainObject.m in Sources */, + 2C5B66D51B3A7A5C005926A7 /* ASFlowLayoutController.mm in Sources */, + 2C5B66D61B3A7A5C005926A7 /* ASHighlightOverlayLayer.mm in Sources */, + 2C5B66D71B3A7A5C005926A7 /* ASMultidimensionalArrayUtils.mm in Sources */, + 2C5B66D81B3A7A5C005926A7 /* ASMutableAttributedStringBuilder.m in Sources */, + 2C5B66D91B3A7A5C005926A7 /* ASRangeController.mm in Sources */, + 2C5B66DA1B3A7A5C005926A7 /* ASRangeHandlerPreload.mm in Sources */, + 2C5B66DB1B3A7A5C005926A7 /* ASRangeHandlerRender.mm in Sources */, + 2C5B66DC1B3A7A5C005926A7 /* ASScrollDirection.m in Sources */, + 2C5B66DD1B3A7A5C005926A7 /* ASTextNodeCoreTextAdditions.m in Sources */, + 2C5B66DE1B3A7A5C005926A7 /* ASTextNodeRenderer.mm in Sources */, + 2C5B66DF1B3A7A5C005926A7 /* ASTextNodeShadower.m in Sources */, + 2C5B66E01B3A7A5C005926A7 /* ASTextNodeTextKitHelpers.mm in Sources */, + 2C5B66E11B3A7A5C005926A7 /* ASTextNodeWordKerner.m in Sources */, + 2C5B66E21B3A7A5C005926A7 /* CGRect+ASConvenience.m in Sources */, + 2C5B66E31B3A7A5C005926A7 /* NSMutableAttributedString+TextKitAdditions.m in Sources */, + 2C5B66E41B3A7A5C005926A7 /* _ASAsyncTransaction.m in Sources */, + 2C5B66E51B3A7A5C005926A7 /* _ASAsyncTransactionContainer.m in Sources */, + 2C5B66E61B3A7A5C005926A7 /* _ASAsyncTransactionGroup.m in Sources */, + 2C5B66E71B3A7A5C005926A7 /* UICollectionViewLayout+ASConvenience.m in Sources */, + 2C5B66E81B3A7A5C005926A7 /* UIView+ASConvenience.m in Sources */, + 2C5B66E91B3A7A5C005926A7 /* ASBatchFetching.m in Sources */, + 2C5B66EA1B3A7A5C005926A7 /* _ASCoreAnimationExtras.mm in Sources */, + 2C5B66EB1B3A7A5C005926A7 /* _ASPendingState.m in Sources */, + 2C5B66EC1B3A7A5C005926A7 /* ASDisplayNode+AsyncDisplay.mm in Sources */, + 2C5B66ED1B3A7A5C005926A7 /* ASDisplayNode+DebugTiming.mm in Sources */, + 2C5B66EE1B3A7A5C005926A7 /* ASDisplayNode+UIViewBridge.mm in Sources */, + 2C5B66EF1B3A7A5C005926A7 /* ASImageNode+CGExtras.m in Sources */, + 2C5B66F01B3A7A5C005926A7 /* ASSentinel.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1529,7 +1546,7 @@ }; name = Release; }; - B35061EE1B010EDF0018CF92 /* Debug */ = { + 2C5B66B11B3A796F005926A7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_WARN_UNREACHABLE_CODE = YES; @@ -1546,9 +1563,9 @@ "DEBUG=1", "$(inherited)", ); - INFOPLIST_FILE = AsyncDisplayKit/Info.plist; + INFOPLIST_FILE = "AsyncDisplayKit-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_NAME = AsyncDisplayKit; @@ -1559,7 +1576,7 @@ }; name = Debug; }; - B35061EF1B010EDF0018CF92 /* Release */ = { + 2C5B66B21B3A796F005926A7 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_WARN_UNREACHABLE_CODE = YES; @@ -1573,9 +1590,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = AsyncDisplayKit/Info.plist; + INFOPLIST_FILE = "AsyncDisplayKit-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_NAME = AsyncDisplayKit; @@ -1625,14 +1642,13 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B35061ED1B010EDF0018CF92 /* Build configuration list for PBXNativeTarget "AsyncDisplayKit-iOS" */ = { + 2C5B66B01B3A796F005926A7 /* Build configuration list for PBXNativeTarget "AsyncDisplayKit-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - B35061EE1B010EDF0018CF92 /* Debug */, - B35061EF1B010EDF0018CF92 /* Release */, + 2C5B66B11B3A796F005926A7 /* Debug */, + 2C5B66B21B3A796F005926A7 /* Release */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/AsyncDisplayKit.xcodeproj/xcshareddata/xcschemes/AsyncDisplayKit-iOS.xcscheme b/AsyncDisplayKit.xcodeproj/xcshareddata/xcschemes/AsyncDisplayKit-iOS.xcscheme index d46a787376..2a1226a3f6 100644 --- a/AsyncDisplayKit.xcodeproj/xcshareddata/xcschemes/AsyncDisplayKit-iOS.xcscheme +++ b/AsyncDisplayKit.xcodeproj/xcshareddata/xcschemes/AsyncDisplayKit-iOS.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -42,7 +42,7 @@ @@ -60,7 +60,7 @@ From 0e37bff7c1930dced2c4ebc8e07ffeb45c4cebce Mon Sep 17 00:00:00 2001 From: Ethan Nagel Date: Wed, 24 Jun 2015 13:13:43 -0700 Subject: [PATCH 2/9] Revert to using a single NSIndexPath for the pending visible item --- AsyncDisplayKit/ASTableView.mm | 35 ++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/AsyncDisplayKit/ASTableView.mm b/AsyncDisplayKit/ASTableView.mm index 080fe4f570..2288958d3c 100644 --- a/AsyncDisplayKit/ASTableView.mm +++ b/AsyncDisplayKit/ASTableView.mm @@ -125,7 +125,7 @@ static BOOL _isInterceptedSelector(SEL sel) ASBatchContext *_batchContext; - NSMutableSet *_pendingVisibleIndexPaths; + NSIndexPath *_pendingVisibleIndexPath; } @property (atomic, assign) BOOL asyncDataSourceLocked; @@ -174,8 +174,6 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { _leadingScreensForBatching = 1.0; _batchContext = [[ASBatchContext alloc] init]; - - _pendingVisibleIndexPaths = [[NSMutableSet alloc] init]; } - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style @@ -433,7 +431,7 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { - [_pendingVisibleIndexPaths addObject:indexPath]; + _pendingVisibleIndexPath = indexPath; [_rangeController visibleNodeIndexPathsDidChangeWithScrollDirection:self.scrollDirection]; @@ -444,8 +442,8 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { - (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath { - if ([_pendingVisibleIndexPaths containsObject:indexPath]) { - [_pendingVisibleIndexPaths removeObject:indexPath]; + if ([_pendingVisibleIndexPath isEqual:indexPath]) { + _pendingVisibleIndexPath = nil; } [_rangeController visibleNodeIndexPathsDidChangeWithScrollDirection:self.scrollDirection]; @@ -519,15 +517,20 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { { ASDisplayNodeAssertMainThread(); - NSMutableSet *visibleIndexPaths = [NSMutableSet setWithArray:[self indexPathsForVisibleRows]]; - - // First, remove any index paths we're tracking that UIKit has now proven it can remember :) - [_pendingVisibleIndexPaths minusSet:visibleIndexPaths]; - - // Next, add all remaining index paths that we know should be visible (from willDisplayCell) but are not in the set. - [visibleIndexPaths unionSet:_pendingVisibleIndexPaths]; - - return visibleIndexPaths.allObjects; + NSArray *visibleIndexPaths = self.indexPathsForVisibleRows; + + if ( _pendingVisibleIndexPath ) { + NSMutableSet *indexPaths = [NSMutableSet setWithArray:self.indexPathsForVisibleRows]; + + if ( [indexPaths containsObject:_pendingVisibleIndexPath]) { + _pendingVisibleIndexPath = nil; // once it has shown up in visibleIndexPaths, we can stop tracking it + } else { + [indexPaths addObject:_pendingVisibleIndexPath]; + visibleIndexPaths = indexPaths.allObjects; + } + } + + return visibleIndexPaths; } - (NSArray *)rangeController:(ASRangeController *)rangeController nodesAtIndexPaths:(NSArray *)indexPaths @@ -544,7 +547,7 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { - (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption { ASDisplayNodeAssertMainThread(); - + BOOL preventAnimation = animationOption == UITableViewRowAnimationNone; ASPerformBlockWithoutAnimation(preventAnimation, ^{ [super insertRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOption]; From baf91b4a458fd61293d91c3785578a4cad86a028 Mon Sep 17 00:00:00 2001 From: Ethan Nagel Date: Wed, 24 Jun 2015 13:18:12 -0700 Subject: [PATCH 3/9] validate that _pendingVisibleIndexPath is contiguous with visibleIndexPaths before appending it. Also, always return a sorted array of NSIndexPaths --- AsyncDisplayKit/ASTableView.mm | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/AsyncDisplayKit/ASTableView.mm b/AsyncDisplayKit/ASTableView.mm index 2288958d3c..86d3b90029 100644 --- a/AsyncDisplayKit/ASTableView.mm +++ b/AsyncDisplayKit/ASTableView.mm @@ -522,11 +522,29 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { if ( _pendingVisibleIndexPath ) { NSMutableSet *indexPaths = [NSMutableSet setWithArray:self.indexPathsForVisibleRows]; + BOOL (^isNextTo)(NSIndexPath *, NSIndexPath *, int) = ^(NSIndexPath *indexPath, NSIndexPath *anchor, int dir) { + if (!anchor) { + return NO; + } + if (indexPath.section == anchor.section) { + return (indexPath.row == anchor.row+dir); + } else if (indexPath.section == anchor.section+dir && anchor.row == 0) { + NSIndexPath *toCompare = (dir==1) ? indexPath : anchor; + NSInteger lastRow = [_dataController numberOfRowsInSection:toCompare.section] - 1; + return (toCompare.row == lastRow); + } else { + return NO; + } + }; + if ( [indexPaths containsObject:_pendingVisibleIndexPath]) { _pendingVisibleIndexPath = nil; // once it has shown up in visibleIndexPaths, we can stop tracking it + } else if (!isNextTo(_pendingVisibleIndexPath, visibleIndexPaths.firstObject, -1) && + !isNextTo(_pendingVisibleIndexPath, visibleIndexPaths.lastObject, +1)) { + _pendingVisibleIndexPath = nil; // not contiguous, ignore. } else { [indexPaths addObject:_pendingVisibleIndexPath]; - visibleIndexPaths = indexPaths.allObjects; + visibleIndexPaths = [indexPaths.allObjects sortedArrayUsingSelector:@selector(compare:)]; } } From 6bf8ec5b03874f0b1c12599e78a32f1549ef8dd0 Mon Sep 17 00:00:00 2001 From: Jack Flintermann Date: Thu, 25 Jun 2015 10:47:10 -0400 Subject: [PATCH 4/9] exclude ASDealloc2MainObject.h from main spec --- AsyncDisplayKit.podspec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AsyncDisplayKit.podspec b/AsyncDisplayKit.podspec index 5acc730b53..da347b579b 100644 --- a/AsyncDisplayKit.podspec +++ b/AsyncDisplayKit.podspec @@ -25,7 +25,10 @@ Pod::Spec.new do |spec| # ASDealloc2MainObject must be compiled with MRR spec.requires_arc = true - spec.exclude_files = ['AsyncDisplayKit/Details/ASDealloc2MainObject.m'] + spec.exclude_files = [ + 'AsyncDisplayKit/Details/ASDealloc2MainObject.h', + 'AsyncDisplayKit/Details/ASDealloc2MainObject.m', + ] spec.subspec 'ASDealloc2MainObject' do |mrr| mrr.requires_arc = false mrr.source_files = [ From ae523f4fce7500dfb5e081f791064dbc08400acb Mon Sep 17 00:00:00 2001 From: Ethan Nagel Date: Thu, 25 Jun 2015 09:53:36 -0700 Subject: [PATCH 5/9] better logic for detecting when the pending index path is before or after the visible index paths --- AsyncDisplayKit/ASTableView.mm | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/AsyncDisplayKit/ASTableView.mm b/AsyncDisplayKit/ASTableView.mm index 86d3b90029..adc757abac 100644 --- a/AsyncDisplayKit/ASTableView.mm +++ b/AsyncDisplayKit/ASTableView.mm @@ -522,25 +522,37 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { if ( _pendingVisibleIndexPath ) { NSMutableSet *indexPaths = [NSMutableSet setWithArray:self.indexPathsForVisibleRows]; - BOOL (^isNextTo)(NSIndexPath *, NSIndexPath *, int) = ^(NSIndexPath *indexPath, NSIndexPath *anchor, int dir) { - if (!anchor) { + BOOL (^isAfter)(NSIndexPath *, NSIndexPath *) = ^BOOL(NSIndexPath *indexPath, NSIndexPath *anchor) { + if (!anchor || !indexPath) { return NO; } if (indexPath.section == anchor.section) { - return (indexPath.row == anchor.row+dir); - } else if (indexPath.section == anchor.section+dir && anchor.row == 0) { - NSIndexPath *toCompare = (dir==1) ? indexPath : anchor; - NSInteger lastRow = [_dataController numberOfRowsInSection:toCompare.section] - 1; - return (toCompare.row == lastRow); - } else { - return NO; + return (indexPath.row == anchor.row+1); // assumes that indexes are valid + + } else if (indexPath.section > anchor.section && indexPath.row == 0) { + if (anchor.row != [_dataController numberOfRowsInSection:anchor.section] -1) { + return NO; // anchor is not at the end of the section + } + + NSInteger nextSection = anchor.section+1; + while([_dataController numberOfRowsInSection:nextSection] == 0) { + ++nextSection; + } + + return indexPath.section == nextSection; } + + return NO; + }; + + BOOL (^isBefore)(NSIndexPath *, NSIndexPath *) = ^BOOL(NSIndexPath *indexPath, NSIndexPath *anchor) { + return isAfter(anchor, indexPath); }; if ( [indexPaths containsObject:_pendingVisibleIndexPath]) { _pendingVisibleIndexPath = nil; // once it has shown up in visibleIndexPaths, we can stop tracking it - } else if (!isNextTo(_pendingVisibleIndexPath, visibleIndexPaths.firstObject, -1) && - !isNextTo(_pendingVisibleIndexPath, visibleIndexPaths.lastObject, +1)) { + } else if (!isBefore(_pendingVisibleIndexPath, visibleIndexPaths.firstObject) && + !isAfter(_pendingVisibleIndexPath, visibleIndexPaths.lastObject)) { _pendingVisibleIndexPath = nil; // not contiguous, ignore. } else { [indexPaths addObject:_pendingVisibleIndexPath]; From 06cfe68cbd47d8361e0d86261e2ed83aedbe3396 Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Sat, 27 Jun 2015 11:06:54 -0700 Subject: [PATCH 6/9] Clean up ASDataController for readability & API naming consistency. --- AsyncDisplayKit/ASCollectionView.mm | 26 +-- AsyncDisplayKit/ASTableView.mm | 42 ++-- AsyncDisplayKit/Details/ASDataController.h | 36 ++-- AsyncDisplayKit/Details/ASDataController.mm | 210 +++++++++++-------- AsyncDisplayKit/Details/ASRangeController.h | 16 +- AsyncDisplayKit/Details/ASRangeController.mm | 40 ++-- 6 files changed, 202 insertions(+), 168 deletions(-) diff --git a/AsyncDisplayKit/ASCollectionView.mm b/AsyncDisplayKit/ASCollectionView.mm index 08f6608fd8..36a995f90b 100644 --- a/AsyncDisplayKit/ASCollectionView.mm +++ b/AsyncDisplayKit/ASCollectionView.mm @@ -184,7 +184,7 @@ static BOOL _isInterceptedSelector(SEL sel) ASDisplayNodePerformBlockOnMainThread(^{ [super reloadData]; }); - [_dataController reloadDataWithAnimationOption:kASCollectionViewAnimationNone completion:completion]; + [_dataController reloadDataWithAnimationOptions:kASCollectionViewAnimationNone completion:completion]; } - (void)reloadData @@ -290,42 +290,42 @@ static BOOL _isInterceptedSelector(SEL sel) - (void)insertSections:(NSIndexSet *)sections { - [_dataController insertSections:sections withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController insertSections:sections withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)deleteSections:(NSIndexSet *)sections { - [_dataController deleteSections:sections withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController deleteSections:sections withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)reloadSections:(NSIndexSet *)sections { - [_dataController reloadSections:sections withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController reloadSections:sections withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection { - [_dataController moveSection:section toSection:newSection withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController moveSection:section toSection:newSection withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)insertItemsAtIndexPaths:(NSArray *)indexPaths { - [_dataController insertRowsAtIndexPaths:indexPaths withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController insertRowsAtIndexPaths:indexPaths withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)deleteItemsAtIndexPaths:(NSArray *)indexPaths { - [_dataController deleteRowsAtIndexPaths:indexPaths withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController deleteRowsAtIndexPaths:indexPaths withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths { - [_dataController reloadRowsAtIndexPaths:indexPaths withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController reloadRowsAtIndexPaths:indexPaths withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath { - [_dataController moveRowAtIndexPath:indexPath toIndexPath:newIndexPath withAnimationOption:kASCollectionViewAnimationNone]; + [_dataController moveRowAtIndexPath:indexPath toIndexPath:newIndexPath withAnimationOptions:kASCollectionViewAnimationNone]; } - (ASCellNode *)nodeForItemAtIndexPath:(NSIndexPath *)indexPath @@ -574,7 +574,7 @@ static BOOL _isInterceptedSelector(SEL sel) return [_dataController nodesAtIndexPaths:indexPaths]; } -- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); if (_performingBatchUpdates) { @@ -588,7 +588,7 @@ static BOOL _isInterceptedSelector(SEL sel) } } -- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); @@ -603,7 +603,7 @@ static BOOL _isInterceptedSelector(SEL sel) } } -- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); @@ -618,7 +618,7 @@ static BOOL _isInterceptedSelector(SEL sel) } } -- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); diff --git a/AsyncDisplayKit/ASTableView.mm b/AsyncDisplayKit/ASTableView.mm index adc757abac..2085b6f543 100644 --- a/AsyncDisplayKit/ASTableView.mm +++ b/AsyncDisplayKit/ASTableView.mm @@ -271,7 +271,7 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { ASDisplayNodePerformBlockOnMainThread(^{ [super reloadData]; }); - [_dataController reloadDataWithAnimationOption:UITableViewRowAnimationNone completion:completion]; + [_dataController reloadDataWithAnimationOptions:UITableViewRowAnimationNone completion:completion]; } - (void)reloadData @@ -333,42 +333,42 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { - (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation { - [_dataController insertSections:sections withAnimationOption:animation]; + [_dataController insertSections:sections withAnimationOptions:animation]; } - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation { - [_dataController deleteSections:sections withAnimationOption:animation]; + [_dataController deleteSections:sections withAnimationOptions:animation]; } - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation { - [_dataController reloadSections:sections withAnimationOption:animation]; + [_dataController reloadSections:sections withAnimationOptions:animation]; } - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection { - [_dataController moveSection:section toSection:newSection withAnimationOption:UITableViewRowAnimationNone]; + [_dataController moveSection:section toSection:newSection withAnimationOptions:UITableViewRowAnimationNone]; } - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation { - [_dataController insertRowsAtIndexPaths:indexPaths withAnimationOption:animation]; + [_dataController insertRowsAtIndexPaths:indexPaths withAnimationOptions:animation]; } - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation { - [_dataController deleteRowsAtIndexPaths:indexPaths withAnimationOption:animation]; + [_dataController deleteRowsAtIndexPaths:indexPaths withAnimationOptions:animation]; } - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation { - [_dataController reloadRowsAtIndexPaths:indexPaths withAnimationOption:animation]; + [_dataController reloadRowsAtIndexPaths:indexPaths withAnimationOptions:animation]; } - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath { - [_dataController moveRowAtIndexPath:indexPath toIndexPath:newIndexPath withAnimationOption:UITableViewRowAnimationNone]; + [_dataController moveRowAtIndexPath:indexPath toIndexPath:newIndexPath withAnimationOptions:UITableViewRowAnimationNone]; } #pragma mark - @@ -574,43 +574,43 @@ void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) { return self.bounds.size; } -- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); - BOOL preventAnimation = animationOption == UITableViewRowAnimationNone; + BOOL preventAnimation = animationOptions == UITableViewRowAnimationNone; ASPerformBlockWithoutAnimation(preventAnimation, ^{ - [super insertRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOption]; + [super insertRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOptions]; }); } -- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); - BOOL preventAnimation = animationOption == UITableViewRowAnimationNone; + BOOL preventAnimation = animationOptions == UITableViewRowAnimationNone; ASPerformBlockWithoutAnimation(preventAnimation, ^{ - [super deleteRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOption]; + [super deleteRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOptions]; }); } -- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); - BOOL preventAnimation = animationOption == UITableViewRowAnimationNone; + BOOL preventAnimation = animationOptions == UITableViewRowAnimationNone; ASPerformBlockWithoutAnimation(preventAnimation, ^{ - [super insertSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOption]; + [super insertSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOptions]; }); } -- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssertMainThread(); - BOOL preventAnimation = animationOption == UITableViewRowAnimationNone; + BOOL preventAnimation = animationOptions == UITableViewRowAnimationNone; ASPerformBlockWithoutAnimation(preventAnimation, ^{ - [super deleteSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOption]; + [super deleteSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOptions]; }); } diff --git a/AsyncDisplayKit/Details/ASDataController.h b/AsyncDisplayKit/Details/ASDataController.h index 8926b47598..a9aa7e55ac 100644 --- a/AsyncDisplayKit/Details/ASDataController.h +++ b/AsyncDisplayKit/Details/ASDataController.h @@ -70,26 +70,26 @@ typedef NSUInteger ASDataControllerAnimationOptions; /** Called for insertion of elements. */ -- (void)dataController:(ASDataController *)dataController willInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; -- (void)dataController:(ASDataController *)dataController didInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)dataController:(ASDataController *)dataController willInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; +- (void)dataController:(ASDataController *)dataController didInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** Called for deletion of elements. */ -- (void)dataController:(ASDataController *)dataController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; -- (void)dataController:(ASDataController *)dataController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)dataController:(ASDataController *)dataController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; +- (void)dataController:(ASDataController *)dataController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** Called for insertion of sections. */ -- (void)dataController:(ASDataController *)dataController willInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; -- (void)dataController:(ASDataController *)dataController didInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)dataController:(ASDataController *)dataController willInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; +- (void)dataController:(ASDataController *)dataController didInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** Called for deletion of sections. */ -- (void)dataController:(ASDataController *)dataController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; -- (void)dataController:(ASDataController *)dataController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)dataController:(ASDataController *)dataController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; +- (void)dataController:(ASDataController *)dataController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; @end @@ -129,7 +129,7 @@ typedef NSUInteger ASDataControllerAnimationOptions; /** @name Initial loading */ -- (void)initialDataLoadingWithAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)initialDataLoadingWithAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** @name Data Updating */ @@ -139,23 +139,23 @@ typedef NSUInteger ASDataControllerAnimationOptions; - (void)endUpdatesWithCompletion:(void (^)(BOOL))completion; -- (void)insertSections:(NSIndexSet *)sections withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)insertSections:(NSIndexSet *)sections withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)deleteSections:(NSIndexSet *)sections withAnimationOption:(ASDataControllerAnimationOptions)animationOption;; +- (void)deleteSections:(NSIndexSet *)sections withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)reloadSections:(NSIndexSet *)sections withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)reloadSections:(NSIndexSet *)sections withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection withAnimationOption:(ASDataControllerAnimationOptions)animationOption;; +- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath withAnimationOption:(ASDataControllerAnimationOptions)animationOption;; +- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; -- (void)reloadDataWithAnimationOption:(ASDataControllerAnimationOptions)animationOption completion:(void (^)())completion; +- (void)reloadDataWithAnimationOptions:(ASDataControllerAnimationOptions)animationOptions completion:(void (^)())completion; /** @name Data Querying */ diff --git a/AsyncDisplayKit/Details/ASDataController.mm b/AsyncDisplayKit/Details/ASDataController.mm index 5a1e561911..579cf4c448 100644 --- a/AsyncDisplayKit/Details/ASDataController.mm +++ b/AsyncDisplayKit/Details/ASDataController.mm @@ -16,50 +16,6 @@ #import "ASMultidimensionalArrayUtils.h" #import "ASDisplayNodeInternal.h" -#define INSERT_NODES(multidimensionalArray, indexPath, elements, animationOption) \ -{ \ - if ([_delegate respondsToSelector:@selector(dataController:willInsertNodes:atIndexPaths:withAnimationOption:)]) { \ - [_delegate dataController:self willInsertNodes:elements atIndexPaths:indexPath withAnimationOption:animationOption]; \ - } \ - ASInsertElementsIntoMultidimensionalArrayAtIndexPaths(multidimensionalArray, indexPath, elements); \ - if ([_delegate respondsToSelector:@selector(dataController:didInsertNodes:atIndexPaths:withAnimationOption:)]) { \ - [_delegate dataController:self didInsertNodes:elements atIndexPaths:indexPath withAnimationOption:animationOption]; \ - } \ -} - -#define DELETE_NODES(multidimensionalArray, indexPath, animationOption) \ -{ \ - if ([_delegate respondsToSelector:@selector(dataController:willDeleteNodesAtIndexPaths:withAnimationOption:)]) { \ - [_delegate dataController:self willDeleteNodesAtIndexPaths:indexPath withAnimationOption:animationOption]; \ - } \ - ASDeleteElementsInMultidimensionalArrayAtIndexPaths(multidimensionalArray, indexPath); \ - if ([_delegate respondsToSelector:@selector(dataController:didDeleteNodesAtIndexPaths:withAnimationOption:)]) { \ - [_delegate dataController:self didDeleteNodesAtIndexPaths:indexPath withAnimationOption:animationOption]; \ - } \ -} - -#define INSERT_SECTIONS(multidimensionalArray, indexSet, sections, animationOption) \ -{ \ - if ([_delegate respondsToSelector:@selector(dataController:willInsertSections:atIndexSet:withAnimationOption:)]) { \ - [_delegate dataController:self willInsertSections:sections atIndexSet:indexSet withAnimationOption:animationOption]; \ - } \ - [multidimensionalArray insertObjects:sections atIndexes:indexSet]; \ - if ([_delegate respondsToSelector:@selector(dataController:didInsertSections:atIndexSet:withAnimationOption:)]) { \ - [_delegate dataController:self didInsertSections:sections atIndexSet:indexSet withAnimationOption:animationOption]; \ - } \ -} - -#define DELETE_SECTIONS(multidimensionalArray, indexSet, animationOption) \ -{ \ - if ([_delegate respondsToSelector:@selector(dataController:willDeleteSectionsAtIndexSet:withAnimationOption:)]) { \ - [_delegate dataController:self willDeleteSectionsAtIndexSet:indexSet withAnimationOption:animationOption]; \ - } \ - [multidimensionalArray removeObjectsAtIndexes:indexSet]; \ - if ([_delegate respondsToSelector:@selector(dataController:didDeleteSectionsAtIndexSet:withAnimationOption:)]) { \ - [_delegate dataController:self didDeleteSectionsAtIndexSet:indexSet withAnimationOption:animationOption]; \ - } \ -} - const static NSUInteger kASDataControllerSizingCountPerProcessor = 5; static void *kASSizingQueueContext = &kASSizingQueueContext; @@ -68,6 +24,14 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; NSMutableArray *_nodes; NSMutableArray *_pendingBlocks; BOOL _asyncDataFetchingEnabled; + BOOL _delegateWillInsertNodes; + BOOL _delegateDidInsertNodes; + BOOL _delegateWillDeleteNodes; + BOOL _delegateDidDeleteNodes; + BOOL _delegateWillInsertSections; + BOOL _delegateDidInsertSections; + BOOL _delegateWillDeleteSections; + BOOL _delegateDidDeleteSections; } @property (atomic, assign) NSUInteger batchUpdateCounter; @@ -76,20 +40,45 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; @implementation ASDataController -- (instancetype)initWithAsyncDataFetching:(BOOL)asyncDataFetchingEnabled { - if (self = [super init]) { - _nodes = [NSMutableArray array]; - _pendingBlocks = [NSMutableArray array]; - _batchUpdateCounter = 0; - _asyncDataFetchingEnabled = asyncDataFetchingEnabled; - } +#pragma mark - Lifecycle +- (instancetype)initWithAsyncDataFetching:(BOOL)asyncDataFetchingEnabled +{ + if (!(self = [super init])) { + return nil; + } + + _nodes = [NSMutableArray array]; + _pendingBlocks = [NSMutableArray array]; + _batchUpdateCounter = 0; + _asyncDataFetchingEnabled = asyncDataFetchingEnabled; + return self; } -#pragma mark - Utils +- (void)setDelegate:(id)delegate +{ + if (_delegate == delegate) { + return; + } + + _delegate = delegate; + + // Interrogate our delegate to understand its capabilities, optimizing away expensive respondsToSelector: calls later. + _delegateWillInsertNodes = [_delegate respondsToSelector:@selector(dataController:willInsertNodes:atIndexPaths:withAnimationOptions:)]; + _delegateDidInsertNodes = [_delegate respondsToSelector:@selector(dataController:didInsertNodes:atIndexPaths:withAnimationOptions:)]; + _delegateWillDeleteNodes = [_delegate respondsToSelector:@selector(dataController:willDeleteNodesAtIndexPaths:withAnimationOptions:)]; + _delegateDidDeleteNodes = [_delegate respondsToSelector:@selector(dataController:didDeleteNodesAtIndexPaths:withAnimationOptions:)]; + _delegateWillInsertSections = [_delegate respondsToSelector:@selector(dataController:willInsertSections:atIndexSet:withAnimationOptions:)]; + _delegateDidInsertSections = [_delegate respondsToSelector:@selector(dataController:didInsertSections:atIndexSet:withAnimationOptions:)]; + _delegateWillDeleteSections = [_delegate respondsToSelector:@selector(dataController:willDeleteSectionsAtIndexSet:withAnimationOptions:)]; + _delegateDidDeleteSections = [_delegate respondsToSelector:@selector(dataController:didDeleteSectionsAtIndexSet:withAnimationOptions:)]; +} -+ (NSUInteger)parallelProcessorCount { +#pragma mark - Queue Management + ++ (NSUInteger)parallelProcessorCount +{ static NSUInteger parallelProcessorCount; static dispatch_once_t onceToken; @@ -154,13 +143,13 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; #pragma mark - Initial Data Loading -- (void)initialDataLoadingWithAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)initialDataLoadingWithAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { [self performDataFetchingWithBlock:^{ NSMutableArray *indexPaths = [NSMutableArray array]; NSUInteger sectionNum = [_dataSource dataControllerNumberOfSections:self]; // insert sections - [self insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sectionNum)] withAnimationOption:0]; + [self insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sectionNum)] withAnimationOptions:0]; for (NSUInteger i = 0; i < sectionNum; i++) { NSIndexPath *indexPath = [[NSIndexPath alloc] initWithIndex:i]; @@ -172,7 +161,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; } // insert elements - [self insertRowsAtIndexPaths:indexPaths withAnimationOption:animationOption]; + [self insertRowsAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; }]; } @@ -210,7 +199,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; }); } -- (void)insertSections:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)insertSections:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { [self performDataFetchingWithBlock:^{ __block int nodeTotalCnt = 0; @@ -243,28 +232,28 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; for (NSUInteger i = 0; i < indexSet.count; i++) { [sectionArray addObject:[NSMutableArray array]]; } - INSERT_SECTIONS(_nodes , indexSet, sectionArray, animationOption); + [self _insertSections:sectionArray atIndexSet:indexSet withAnimationOptions:animationOptions]; }]; - [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOption]; + [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; }); }]; } -- (void)deleteSections:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)deleteSections:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { dispatch_async([[self class] sizingQueue], ^{ [self asyncUpdateDataWithBlock:^{ // remove elements NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet(_nodes, indexSet); - DELETE_NODES(_nodes, indexPaths, animationOption); - DELETE_SECTIONS(_nodes, indexSet, animationOption); + [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; + [self _deleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; }]; }); } -- (void)reloadSections:(NSIndexSet *)sections withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)reloadSections:(NSIndexSet *)sections withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { [self performDataFetchingWithBlock:^{ // We need to keep data query on data source in the calling thread. @@ -289,23 +278,23 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [self syncUpdateDataWithBlock:^{ // remove elements NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet(_nodes, sections); - DELETE_NODES(_nodes, indexPaths, animationOption); + [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; }]; // reinsert the elements - [self _batchInsertNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOption]; + [self _batchInsertNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOptions]; }); }]; } -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { dispatch_async([ASDataController sizingQueue], ^{ [self asyncUpdateDataWithBlock:^{ // remove elements NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet(_nodes, [NSIndexSet indexSetWithIndex:section]); NSArray *nodes = ASFindElementsInMultidimensionalArrayAtIndexPaths(_nodes, indexPaths); - DELETE_NODES(_nodes, indexPaths, animationOption); + [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; // update the section of indexpaths NSIndexPath *sectionIndexPath = [[NSIndexPath alloc] initWithIndex:newSection]; @@ -315,14 +304,14 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; }]; // Don't re-calculate size for moving - INSERT_NODES(_nodes, updatedIndexPaths, nodes, animationOption); + [self _insertNodes:nodes atIndexPaths:updatedIndexPaths animationOptions:animationOptions]; }]; }); } - (void)_insertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths - withAnimationOption:(ASDataControllerAnimationOptions)animationOption + withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { if (!nodes.count) { return; @@ -354,7 +343,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [self asyncUpdateDataWithBlock:^{ // Insert finished nodes into data storage - INSERT_NODES(_nodes, indexPaths, nodes, animationOption); + [self _insertNodes:nodes atIndexPaths:indexPaths animationOptions:animationOptions]; }]; }; @@ -367,7 +356,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; - (void)_batchInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths - withAnimationOptions:(ASDataControllerAnimationOptions)animationOption + withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { NSUInteger blockSize = [[ASDataController class] parallelProcessorCount] * kASDataControllerSizingCountPerProcessor; @@ -377,11 +366,11 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; NSArray *batchedIndexPaths = [indexPaths subarrayWithRange:batchedRange]; NSArray *batchedNodes = [nodes subarrayWithRange:batchedRange]; - [self _insertNodes:batchedNodes atIndexPaths:batchedIndexPaths withAnimationOption:animationOption]; + [self _insertNodes:batchedNodes atIndexPaths:batchedIndexPaths withAnimationOptions:animationOptions]; } } -- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { [self performDataFetchingWithBlock:^{ // sort indexPath to avoid messing up the index when inserting in several batches @@ -391,23 +380,23 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [nodes addObject:[_dataSource dataController:self nodeAtIndexPath:sortedIndexPaths[i]]]; } - [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOption]; + [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; }]; } -- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { // sort indexPath in order to avoid messing up the index when deleting NSArray *sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)]; dispatch_async([ASDataController sizingQueue], ^{ [self asyncUpdateDataWithBlock:^{ - DELETE_NODES(_nodes, sortedIndexPaths, animationOption); + [self _deleteNodesAtIndexPaths:sortedIndexPaths animationOptions:animationOptions]; }]; }); } -- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { // Reloading requires re-fetching the data. Load it on the current calling thread, locking the data source. [self performDataFetchingWithBlock:^{ @@ -419,30 +408,30 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; dispatch_async([ASDataController sizingQueue], ^{ [self syncUpdateDataWithBlock:^{ - DELETE_NODES(_nodes, indexPaths, animationOption); + [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; }]; - [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOption]; + [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; }); }]; } -- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath withAnimationOption:(ASDataControllerAnimationOptions)animationOption +- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { dispatch_async([ASDataController sizingQueue], ^{ [self asyncUpdateDataWithBlock:^{ NSArray *nodes = ASFindElementsInMultidimensionalArrayAtIndexPaths(_nodes, [NSArray arrayWithObject:indexPath]); NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; - DELETE_NODES(_nodes, indexPaths, animationOption); + [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; // Don't re-calculate size for moving NSArray *newIndexPaths = [NSArray arrayWithObject:newIndexPath]; - INSERT_NODES(_nodes, newIndexPaths, nodes, animationOption); + [self _insertNodes:nodes atIndexPaths:newIndexPaths animationOptions:animationOptions]; }]; }); } -- (void)reloadDataWithAnimationOption:(ASDataControllerAnimationOptions)animationOption completion:(void (^)())completion +- (void)reloadDataWithAnimationOptions:(ASDataControllerAnimationOptions)animationOptions completion:(void (^)())completion { [self performDataFetchingWithBlock:^{ // Fetching data in calling thread @@ -465,10 +454,10 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [self syncUpdateDataWithBlock:^{ // Remove everything that existed before the reload, now that we're ready to insert replacements NSArray *indexPaths = ASIndexPathsForMultidimensionalArray(_nodes); - DELETE_NODES(_nodes, indexPaths, animationOption); + [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, _nodes.count)]; - DELETE_SECTIONS(_nodes, indexSet, animationOption); + [self deleteSections:indexSet withAnimationOptions:animationOptions]; // Insert each section NSMutableArray *sections = [[NSMutableArray alloc] initWithCapacity:sectionNum]; @@ -476,11 +465,10 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [sections addObject:[[NSMutableArray alloc] init]]; } - INSERT_SECTIONS(_nodes, [[NSMutableIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, sectionNum)], sections, animationOption); - + [self _insertSections:sections atIndexSet:[[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, sectionNum)] withAnimationOptions:animationOptions]; }]; - [self _batchInsertNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOption]; + [self _batchInsertNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOptions]; if (completion) { dispatch_async(dispatch_get_main_queue(), completion); @@ -524,6 +512,52 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; return ASFindElementsInMultidimensionalArrayAtIndexPaths(_nodes, [indexPaths sortedArrayUsingSelector:@selector(compare:)]); } +#pragma mark - Internal Data Updating + +- (void)_insertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths animationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexPaths.count == 0) + return; + if (_delegateWillInsertNodes) + [_delegate dataController:self willInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; + ASInsertElementsIntoMultidimensionalArrayAtIndexPaths(_nodes, indexPaths, nodes); + if (_delegateDidInsertNodes) + [_delegate dataController:self didInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; +} + +- (void)_deleteNodesAtIndexPaths:(NSArray *)indexPaths animationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexPaths.count == 0) + return; + if (_delegateWillDeleteNodes) + [_delegate dataController:self willDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; + ASDeleteElementsInMultidimensionalArrayAtIndexPaths(_nodes, indexPaths); + if (_delegateDidDeleteNodes) + [_delegate dataController:self didDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; +} + +- (void)_insertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexSet.count == 0) + return; + if (_delegateWillInsertSections) + [_delegate dataController:self willInsertSections:sections atIndexSet:indexSet withAnimationOptions:animationOptions]; + [_nodes insertObjects:sections atIndexes:indexSet]; + if (_delegateDidInsertSections) + [_delegate dataController:self didInsertSections:sections atIndexSet:indexSet withAnimationOptions:animationOptions]; +} + +- (void)_deleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexSet.count == 0) + return; + if (_delegateWillDeleteSections) + [_delegate dataController:self willDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; + [_nodes removeObjectsAtIndexes:indexSet]; + if (_delegateDidDeleteSections) + [_delegate dataController:self didDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; +} + #pragma mark - Dealloc - (void)dealloc { diff --git a/AsyncDisplayKit/Details/ASRangeController.h b/AsyncDisplayKit/Details/ASRangeController.h index e78a2d3d22..f59b151f2e 100644 --- a/AsyncDisplayKit/Details/ASRangeController.h +++ b/AsyncDisplayKit/Details/ASRangeController.h @@ -90,43 +90,43 @@ /** * Called for nodes insertion. */ -- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** * Called for nodes deletion. */ -- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** * Called for section insertion. */ -- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** * Called for section deletion. */ -- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; @optional /** * Called before nodes insertion. */ -- (void)rangeController:(ASRangeController *)rangeController willInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController willInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** * Called before nodes deletion. */ -- (void)rangeController:(ASRangeController *)rangeController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** * Called before section insertion. */ -- (void)rangeController:(ASRangeController *)rangeController willInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController willInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; /** * Called before section deletion. */ -- (void)rangeController:(ASRangeController *)rangeController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption; +- (void)rangeController:(ASRangeController *)rangeController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions; @end diff --git a/AsyncDisplayKit/Details/ASRangeController.mm b/AsyncDisplayKit/Details/ASRangeController.mm index 2a30ab362e..2ac2593da2 100644 --- a/AsyncDisplayKit/Details/ASRangeController.mm +++ b/AsyncDisplayKit/Details/ASRangeController.mm @@ -181,15 +181,15 @@ }); } -- (void)dataController:(ASDataController *)dataController willInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController willInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodePerformBlockOnMainThread(^{ - if ([_delegate respondsToSelector:@selector(rangeController:willInsertNodesAtIndexPaths:withAnimationOption:)]) { - [_delegate rangeController:self willInsertNodesAtIndexPaths:indexPaths withAnimationOption:animationOption]; + if ([_delegate respondsToSelector:@selector(rangeController:willInsertNodesAtIndexPaths:withAnimationOptions:)]) { + [_delegate rangeController:self willInsertNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; } }); } -- (void)dataController:(ASDataController *)dataController didInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController didInsertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssert(nodes.count == indexPaths.count, @"Invalid index path"); NSMutableArray *nodeSizes = [NSMutableArray arrayWithCapacity:nodes.count]; @@ -202,37 +202,37 @@ [_layoutController insertNodesAtIndexPaths:indexPaths withSizes:nodeSizes]; } _rangeIsValid = NO; - [_delegate rangeController:self didInsertNodesAtIndexPaths:indexPaths withAnimationOption:animationOption]; + [_delegate rangeController:self didInsertNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; }); } -- (void)dataController:(ASDataController *)dataController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController willDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodePerformBlockOnMainThread(^{ - if ([_delegate respondsToSelector:@selector(rangeController:willDeleteNodesAtIndexPaths:withAnimationOption:)]) { - [_delegate rangeController:self willDeleteNodesAtIndexPaths:indexPaths withAnimationOption:animationOption]; + if ([_delegate respondsToSelector:@selector(rangeController:willDeleteNodesAtIndexPaths:withAnimationOptions:)]) { + [_delegate rangeController:self willDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; } }); } -- (void)dataController:(ASDataController *)dataController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodePerformBlockOnMainThread(^{ if ([_layoutController respondsToSelector:@selector(deleteNodesAtIndexPaths:)]) { [_layoutController deleteNodesAtIndexPaths:indexPaths]; } _rangeIsValid = NO; - [_delegate rangeController:self didDeleteNodesAtIndexPaths:indexPaths withAnimationOption:animationOption]; + [_delegate rangeController:self didDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; }); } -- (void)dataController:(ASDataController *)dataController willInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController willInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodePerformBlockOnMainThread(^{ - if ([_delegate respondsToSelector:@selector(rangeController:willInsertSectionsAtIndexSet:withAnimationOption:)]) { - [_delegate rangeController:self willInsertSectionsAtIndexSet:indexSet withAnimationOption:animationOption]; + if ([_delegate respondsToSelector:@selector(rangeController:willInsertSectionsAtIndexSet:withAnimationOptions:)]) { + [_delegate rangeController:self willInsertSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; } }); } -- (void)dataController:(ASDataController *)dataController didInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController didInsertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodeAssert(sections.count == indexSet.count, @"Invalid sections"); NSMutableArray *sectionNodeSizes = [NSMutableArray arrayWithCapacity:sections.count]; @@ -250,25 +250,25 @@ [_layoutController insertSections:sectionNodeSizes atIndexSet:indexSet]; } _rangeIsValid = NO; - [_delegate rangeController:self didInsertSectionsAtIndexSet:indexSet withAnimationOption:animationOption]; + [_delegate rangeController:self didInsertSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; }); } -- (void)dataController:(ASDataController *)dataController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController willDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodePerformBlockOnMainThread(^{ - if ([_delegate respondsToSelector:@selector(rangeController:willDeleteSectionsAtIndexSet:withAnimationOption:)]) { - [_delegate rangeController:self willDeleteSectionsAtIndexSet:indexSet withAnimationOption:animationOption]; + if ([_delegate respondsToSelector:@selector(rangeController:willDeleteSectionsAtIndexSet:withAnimationOptions:)]) { + [_delegate rangeController:self willDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; } }); } -- (void)dataController:(ASDataController *)dataController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption { +- (void)dataController:(ASDataController *)dataController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { ASDisplayNodePerformBlockOnMainThread(^{ if ([_layoutController respondsToSelector:@selector(deleteSectionsAtIndexSet:)]) { [_layoutController deleteSectionsAtIndexSet:indexSet]; } _rangeIsValid = NO; - [_delegate rangeController:self didDeleteSectionsAtIndexSet:indexSet withAnimationOption:animationOption]; + [_delegate rangeController:self didDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; }); } From dc19970fe8fe93c29582ddb99dd8c333846438fb Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Sat, 27 Jun 2015 11:48:55 -0700 Subject: [PATCH 7/9] Clean up organization and naming of methods internal to ASDataController. --- AsyncDisplayKit/Details/ASDataController.mm | 354 ++++++++++---------- 1 file changed, 180 insertions(+), 174 deletions(-) diff --git a/AsyncDisplayKit/Details/ASDataController.mm b/AsyncDisplayKit/Details/ASDataController.mm index 579cf4c448..973646fabf 100644 --- a/AsyncDisplayKit/Details/ASDataController.mm +++ b/AsyncDisplayKit/Details/ASDataController.mm @@ -127,7 +127,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; }); } -- (void)performDataFetchingWithBlock:(dispatch_block_t)block { +- (void)accessDataSourceWithBlock:(dispatch_block_t)block { if (_asyncDataFetchingEnabled) { [_dataSource dataControllerLockDataSource]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ @@ -141,10 +141,119 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; } } -#pragma mark - Initial Data Loading +#pragma mark - Cell Layout + +- (void)_layoutNodes:(NSArray *)nodes + atIndexPaths:(NSArray *)indexPaths +withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (!nodes.count) { + return; + } + + dispatch_group_t layoutGroup = dispatch_group_create(); + + for (NSUInteger j = 0; j < nodes.count && j < indexPaths.count; j += kASDataControllerSizingCountPerProcessor) { + NSArray *subIndexPaths = [indexPaths subarrayWithRange:NSMakeRange(j, MIN(kASDataControllerSizingCountPerProcessor, indexPaths.count - j))]; + + // TODO: The current implementation does not make use of different constrained sizes per node. + // There should be a fast-path that avoids all of this object creation. + NSMutableArray *nodeBoundSizes = [[NSMutableArray alloc] initWithCapacity:kASDataControllerSizingCountPerProcessor]; + [subIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { + [nodeBoundSizes addObject:[NSValue valueWithCGSize:[_dataSource dataController:self constrainedSizeForNodeAtIndexPath:indexPath]]]; + }]; + + dispatch_group_async(layoutGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [subIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { + ASCellNode *node = nodes[j + idx]; + [node measure:[nodeBoundSizes[idx] CGSizeValue]]; + node.frame = CGRectMake(0.0f, 0.0f, node.calculatedSize.width, node.calculatedSize.height); + }]; + }); + } + + dispatch_block_t block = ^{ + dispatch_group_wait(layoutGroup, DISPATCH_TIME_FOREVER); + + [self asyncUpdateDataWithBlock:^{ + // Insert finished nodes into data storage + [self _insertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; + }]; + }; + + if ([ASDataController executingOnSizingQueue]) { + block(); + } else { + dispatch_async([ASDataController sizingQueue], block); + } +} + +- (void)_batchLayoutNodes:(NSArray *)nodes + atIndexPaths:(NSArray *)indexPaths + withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + NSUInteger blockSize = [[ASDataController class] parallelProcessorCount] * kASDataControllerSizingCountPerProcessor; + + // Processing in batches + for (NSUInteger i = 0; i < indexPaths.count; i += blockSize) { + NSRange batchedRange = NSMakeRange(i, MIN(indexPaths.count - i, blockSize)); + NSArray *batchedIndexPaths = [indexPaths subarrayWithRange:batchedRange]; + NSArray *batchedNodes = [nodes subarrayWithRange:batchedRange]; + + [self _layoutNodes:batchedNodes atIndexPaths:batchedIndexPaths withAnimationOptions:animationOptions]; + } +} + +#pragma mark - Internal Data Editing + +- (void)_insertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexPaths.count == 0) + return; + if (_delegateWillInsertNodes) + [_delegate dataController:self willInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; + ASInsertElementsIntoMultidimensionalArrayAtIndexPaths(_nodes, indexPaths, nodes); + if (_delegateDidInsertNodes) + [_delegate dataController:self didInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; +} + +- (void)_deleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexPaths.count == 0) + return; + if (_delegateWillDeleteNodes) + [_delegate dataController:self willDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; + ASDeleteElementsInMultidimensionalArrayAtIndexPaths(_nodes, indexPaths); + if (_delegateDidDeleteNodes) + [_delegate dataController:self didDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; +} + +- (void)_insertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexSet.count == 0) + return; + if (_delegateWillInsertSections) + [_delegate dataController:self willInsertSections:sections atIndexSet:indexSet withAnimationOptions:animationOptions]; + [_nodes insertObjects:sections atIndexes:indexSet]; + if (_delegateDidInsertSections) + [_delegate dataController:self didInsertSections:sections atIndexSet:indexSet withAnimationOptions:animationOptions]; +} + +- (void)_deleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions +{ + if (indexSet.count == 0) + return; + if (_delegateWillDeleteSections) + [_delegate dataController:self willDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; + [_nodes removeObjectsAtIndexes:indexSet]; + if (_delegateDidDeleteSections) + [_delegate dataController:self didDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; +} + +#pragma mark - Initial Load & Full Reload (External API) - (void)initialDataLoadingWithAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { - [self performDataFetchingWithBlock:^{ + [self accessDataSourceWithBlock:^{ NSMutableArray *indexPaths = [NSMutableArray array]; NSUInteger sectionNum = [_dataSource dataControllerNumberOfSections:self]; @@ -166,7 +275,53 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; }]; } -#pragma mark - Data Update +- (void)reloadDataWithAnimationOptions:(ASDataControllerAnimationOptions)animationOptions completion:(void (^)())completion +{ + [self accessDataSourceWithBlock:^{ + // Fetching data in calling thread + NSMutableArray *updatedNodes = [[NSMutableArray alloc] init]; + NSMutableArray *updatedIndexPaths = [[NSMutableArray alloc] init]; + + NSUInteger sectionNum = [_dataSource dataControllerNumberOfSections:self]; + for (NSUInteger i = 0; i < sectionNum; i++) { + NSIndexPath *sectionIndexPath = [[NSIndexPath alloc] initWithIndex:i]; + + NSUInteger rowNum = [_dataSource dataController:self rowsInSection:i]; + for (NSUInteger j = 0; j < rowNum; j++) { + NSIndexPath *indexPath = [sectionIndexPath indexPathByAddingIndex:j]; + [updatedIndexPaths addObject:indexPath]; + [updatedNodes addObject:[_dataSource dataController:self nodeAtIndexPath:indexPath]]; + } + } + + dispatch_async([ASDataController sizingQueue], ^{ + [self syncUpdateDataWithBlock:^{ + // Remove everything that existed before the reload, now that we're ready to insert replacements + NSArray *indexPaths = ASIndexPathsForMultidimensionalArray(_nodes); + [self _deleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; + + NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, _nodes.count)]; + [self deleteSections:indexSet withAnimationOptions:animationOptions]; + + // Insert each section + NSMutableArray *sections = [[NSMutableArray alloc] initWithCapacity:sectionNum]; + for (int i = 0; i < sectionNum; i++) { + [sections addObject:[[NSMutableArray alloc] init]]; + } + + [self _insertSections:sections atIndexSet:[[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, sectionNum)] withAnimationOptions:animationOptions]; + }]; + + [self _batchLayoutNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOptions]; + + if (completion) { + dispatch_async(dispatch_get_main_queue(), completion); + } + }); + }]; +} + +#pragma mark - Batching (External API) - (void)beginUpdates { @@ -199,9 +354,11 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; }); } +#pragma mark - Section Editing (External API) + - (void)insertSections:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { - [self performDataFetchingWithBlock:^{ + [self accessDataSourceWithBlock:^{ __block int nodeTotalCnt = 0; NSMutableArray *nodeCounts = [NSMutableArray arrayWithCapacity:indexSet.count]; [indexSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { @@ -235,7 +392,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [self _insertSections:sectionArray atIndexSet:indexSet withAnimationOptions:animationOptions]; }]; - [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; + [self _batchLayoutNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; }); }]; } @@ -247,7 +404,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; // remove elements NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet(_nodes, indexSet); - [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; + [self _deleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; [self _deleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; }]; }); @@ -255,7 +412,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; - (void)reloadSections:(NSIndexSet *)sections withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { - [self performDataFetchingWithBlock:^{ + [self accessDataSourceWithBlock:^{ // We need to keep data query on data source in the calling thread. NSMutableArray *updatedIndexPaths = [[NSMutableArray alloc] init]; NSMutableArray *updatedNodes = [[NSMutableArray alloc] init]; @@ -278,11 +435,11 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [self syncUpdateDataWithBlock:^{ // remove elements NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet(_nodes, sections); - [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; + [self _deleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; }]; // reinsert the elements - [self _batchInsertNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOptions]; + [self _batchLayoutNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOptions]; }); }]; } @@ -294,7 +451,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; // remove elements NSArray *indexPaths = ASIndexPathsForMultidimensionalArrayAtIndexSet(_nodes, [NSIndexSet indexSetWithIndex:section]); NSArray *nodes = ASFindElementsInMultidimensionalArrayAtIndexPaths(_nodes, indexPaths); - [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; + [self _deleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; // update the section of indexpaths NSIndexPath *sectionIndexPath = [[NSIndexPath alloc] initWithIndex:newSection]; @@ -304,75 +461,16 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; }]; // Don't re-calculate size for moving - [self _insertNodes:nodes atIndexPaths:updatedIndexPaths animationOptions:animationOptions]; + [self _insertNodes:nodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOptions]; }]; }); } -- (void)_insertNodes:(NSArray *)nodes - atIndexPaths:(NSArray *)indexPaths - withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions -{ - if (!nodes.count) { - return; - } - - dispatch_group_t layoutGroup = dispatch_group_create(); - - for (NSUInteger j = 0; j < nodes.count && j < indexPaths.count; j += kASDataControllerSizingCountPerProcessor) { - NSArray *subIndexPaths = [indexPaths subarrayWithRange:NSMakeRange(j, MIN(kASDataControllerSizingCountPerProcessor, indexPaths.count - j))]; - - // TODO: The current implementation does not make use of different constrained sizes per node. - // There should be a fast-path that avoids all of this object creation. - NSMutableArray *nodeBoundSizes = [[NSMutableArray alloc] initWithCapacity:kASDataControllerSizingCountPerProcessor]; - [subIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { - [nodeBoundSizes addObject:[NSValue valueWithCGSize:[_dataSource dataController:self constrainedSizeForNodeAtIndexPath:indexPath]]]; - }]; - - dispatch_group_async(layoutGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [subIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { - ASCellNode *node = nodes[j + idx]; - [node measure:[nodeBoundSizes[idx] CGSizeValue]]; - node.frame = CGRectMake(0.0f, 0.0f, node.calculatedSize.width, node.calculatedSize.height); - }]; - }); - } - - dispatch_block_t block = ^{ - dispatch_group_wait(layoutGroup, DISPATCH_TIME_FOREVER); - - [self asyncUpdateDataWithBlock:^{ - // Insert finished nodes into data storage - [self _insertNodes:nodes atIndexPaths:indexPaths animationOptions:animationOptions]; - }]; - }; - - if ([ASDataController executingOnSizingQueue]) { - block(); - } else { - dispatch_async([ASDataController sizingQueue], block); - } -} - -- (void)_batchInsertNodes:(NSArray *)nodes - atIndexPaths:(NSArray *)indexPaths - withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions -{ - NSUInteger blockSize = [[ASDataController class] parallelProcessorCount] * kASDataControllerSizingCountPerProcessor; - - // Processing in batches - for (NSUInteger i = 0; i < indexPaths.count; i += blockSize) { - NSRange batchedRange = NSMakeRange(i, MIN(indexPaths.count - i, blockSize)); - NSArray *batchedIndexPaths = [indexPaths subarrayWithRange:batchedRange]; - NSArray *batchedNodes = [nodes subarrayWithRange:batchedRange]; - - [self _insertNodes:batchedNodes atIndexPaths:batchedIndexPaths withAnimationOptions:animationOptions]; - } -} +#pragma mark - Row Editing (External API) - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { - [self performDataFetchingWithBlock:^{ + [self accessDataSourceWithBlock:^{ // sort indexPath to avoid messing up the index when inserting in several batches NSArray *sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)]; NSMutableArray *nodes = [[NSMutableArray alloc] initWithCapacity:indexPaths.count]; @@ -380,7 +478,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [nodes addObject:[_dataSource dataController:self nodeAtIndexPath:sortedIndexPaths[i]]]; } - [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; + [self _batchLayoutNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; }]; } @@ -391,7 +489,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; dispatch_async([ASDataController sizingQueue], ^{ [self asyncUpdateDataWithBlock:^{ - [self _deleteNodesAtIndexPaths:sortedIndexPaths animationOptions:animationOptions]; + [self _deleteNodesAtIndexPaths:sortedIndexPaths withAnimationOptions:animationOptions]; }]; }); } @@ -399,7 +497,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions { // Reloading requires re-fetching the data. Load it on the current calling thread, locking the data source. - [self performDataFetchingWithBlock:^{ + [self accessDataSourceWithBlock:^{ NSMutableArray *nodes = [[NSMutableArray alloc] initWithCapacity:indexPaths.count]; [indexPaths sortedArrayUsingSelector:@selector(compare:)]; [indexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { @@ -408,10 +506,10 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; dispatch_async([ASDataController sizingQueue], ^{ [self syncUpdateDataWithBlock:^{ - [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; + [self _deleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; }]; - [self _batchInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; + [self _batchLayoutNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; }); }]; } @@ -422,62 +520,16 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; [self asyncUpdateDataWithBlock:^{ NSArray *nodes = ASFindElementsInMultidimensionalArrayAtIndexPaths(_nodes, [NSArray arrayWithObject:indexPath]); NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; - [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; + [self _deleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; // Don't re-calculate size for moving NSArray *newIndexPaths = [NSArray arrayWithObject:newIndexPath]; - [self _insertNodes:nodes atIndexPaths:newIndexPaths animationOptions:animationOptions]; + [self _insertNodes:nodes atIndexPaths:newIndexPaths withAnimationOptions:animationOptions]; }]; }); } -- (void)reloadDataWithAnimationOptions:(ASDataControllerAnimationOptions)animationOptions completion:(void (^)())completion -{ - [self performDataFetchingWithBlock:^{ - // Fetching data in calling thread - NSMutableArray *updatedNodes = [[NSMutableArray alloc] init]; - NSMutableArray *updatedIndexPaths = [[NSMutableArray alloc] init]; - - NSUInteger sectionNum = [_dataSource dataControllerNumberOfSections:self]; - for (NSUInteger i = 0; i < sectionNum; i++) { - NSIndexPath *sectionIndexPath = [[NSIndexPath alloc] initWithIndex:i]; - - NSUInteger rowNum = [_dataSource dataController:self rowsInSection:i]; - for (NSUInteger j = 0; j < rowNum; j++) { - NSIndexPath *indexPath = [sectionIndexPath indexPathByAddingIndex:j]; - [updatedIndexPaths addObject:indexPath]; - [updatedNodes addObject:[_dataSource dataController:self nodeAtIndexPath:indexPath]]; - } - } - - dispatch_async([ASDataController sizingQueue], ^{ - [self syncUpdateDataWithBlock:^{ - // Remove everything that existed before the reload, now that we're ready to insert replacements - NSArray *indexPaths = ASIndexPathsForMultidimensionalArray(_nodes); - [self _deleteNodesAtIndexPaths:indexPaths animationOptions:animationOptions]; - - NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, _nodes.count)]; - [self deleteSections:indexSet withAnimationOptions:animationOptions]; - - // Insert each section - NSMutableArray *sections = [[NSMutableArray alloc] initWithCapacity:sectionNum]; - for (int i = 0; i < sectionNum; i++) { - [sections addObject:[[NSMutableArray alloc] init]]; - } - - [self _insertSections:sections atIndexSet:[[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(0, sectionNum)] withAnimationOptions:animationOptions]; - }]; - - [self _batchInsertNodes:updatedNodes atIndexPaths:updatedIndexPaths withAnimationOptions:animationOptions]; - - if (completion) { - dispatch_async(dispatch_get_main_queue(), completion); - } - }); - }]; -} - -#pragma mark - Data Querying +#pragma mark - Data Querying (External API) - (NSUInteger)numberOfSections { @@ -500,7 +552,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; - (NSArray *)nodesAtIndexPaths:(NSArray *)indexPaths { ASDisplayNodeAssertMainThread(); - + // Make sure that any asynchronous layout operations have finished so that those nodes are present. // Otherwise a failure case could be: // - Reload section 2, deleting all current nodes in that section. @@ -512,52 +564,6 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; return ASFindElementsInMultidimensionalArrayAtIndexPaths(_nodes, [indexPaths sortedArrayUsingSelector:@selector(compare:)]); } -#pragma mark - Internal Data Updating - -- (void)_insertNodes:(NSArray *)nodes atIndexPaths:(NSArray *)indexPaths animationOptions:(ASDataControllerAnimationOptions)animationOptions -{ - if (indexPaths.count == 0) - return; - if (_delegateWillInsertNodes) - [_delegate dataController:self willInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; - ASInsertElementsIntoMultidimensionalArrayAtIndexPaths(_nodes, indexPaths, nodes); - if (_delegateDidInsertNodes) - [_delegate dataController:self didInsertNodes:nodes atIndexPaths:indexPaths withAnimationOptions:animationOptions]; -} - -- (void)_deleteNodesAtIndexPaths:(NSArray *)indexPaths animationOptions:(ASDataControllerAnimationOptions)animationOptions -{ - if (indexPaths.count == 0) - return; - if (_delegateWillDeleteNodes) - [_delegate dataController:self willDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; - ASDeleteElementsInMultidimensionalArrayAtIndexPaths(_nodes, indexPaths); - if (_delegateDidDeleteNodes) - [_delegate dataController:self didDeleteNodesAtIndexPaths:indexPaths withAnimationOptions:animationOptions]; -} - -- (void)_insertSections:(NSArray *)sections atIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions -{ - if (indexSet.count == 0) - return; - if (_delegateWillInsertSections) - [_delegate dataController:self willInsertSections:sections atIndexSet:indexSet withAnimationOptions:animationOptions]; - [_nodes insertObjects:sections atIndexes:indexSet]; - if (_delegateDidInsertSections) - [_delegate dataController:self didInsertSections:sections atIndexSet:indexSet withAnimationOptions:animationOptions]; -} - -- (void)_deleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions -{ - if (indexSet.count == 0) - return; - if (_delegateWillDeleteSections) - [_delegate dataController:self willDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; - [_nodes removeObjectsAtIndexes:indexSet]; - if (_delegateDidDeleteSections) - [_delegate dataController:self didDeleteSectionsAtIndexSet:indexSet withAnimationOptions:animationOptions]; -} - #pragma mark - Dealloc - (void)dealloc { From 8fc79b1d4cf53662b3a7885c998f6b04005da015 Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Sat, 27 Jun 2015 12:07:40 -0700 Subject: [PATCH 8/9] Update the identifier that AsyncDisplayKit uses to label its internal queues. --- examples/ASTableViewStressTest/Sample/Info.plist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ASTableViewStressTest/Sample/Info.plist b/examples/ASTableViewStressTest/Sample/Info.plist index 35d842827b..ad825d6e33 100644 --- a/examples/ASTableViewStressTest/Sample/Info.plist +++ b/examples/ASTableViewStressTest/Sample/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - com.facebook.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) + org.AsyncDisplayKit.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName From feba7f8ed16735f08cd728ca4bb860fe72ebdf38 Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Sat, 27 Jun 2015 12:10:04 -0700 Subject: [PATCH 9/9] Update the identifier that AsyncDisplayKit uses to label its internal queues (2/2). --- AsyncDisplayKit/ASDisplayNode.mm | 2 +- AsyncDisplayKit/Details/ASDataController.mm | 5 +++-- AsyncDisplayKit/Details/ASTextNodeWordKerner.m | 2 +- AsyncDisplayKit/Details/_ASDisplayLayer.mm | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index c1a269e559..212c5c76f1 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1645,7 +1645,7 @@ static void _recursivelySetDisplaySuspended(ASDisplayNode *node, CALayer *layer, static dispatch_queue_t asyncSizingQueue = NULL; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - asyncSizingQueue = dispatch_queue_create("com.facebook.AsyncDisplayKit.ASDisplayNode.asyncSizingQueue", DISPATCH_QUEUE_CONCURRENT); + asyncSizingQueue = dispatch_queue_create("org.AsyncDisplayKit.ASDisplayNode.asyncSizingQueue", DISPATCH_QUEUE_CONCURRENT); // we use the highpri queue to prioritize UI rendering over other async operations dispatch_set_target_queue(asyncSizingQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)); }); diff --git a/AsyncDisplayKit/Details/ASDataController.mm b/AsyncDisplayKit/Details/ASDataController.mm index 973646fabf..bfb56d3b67 100644 --- a/AsyncDisplayKit/Details/ASDataController.mm +++ b/AsyncDisplayKit/Details/ASDataController.mm @@ -94,7 +94,7 @@ static void *kASSizingQueueContext = &kASSizingQueueContext; static dispatch_queue_t sizingQueue = NULL; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - sizingQueue = dispatch_queue_create("com.facebook.AsyncDisplayKit.ASDataController.sizingQueue", DISPATCH_QUEUE_SERIAL); + sizingQueue = dispatch_queue_create("org.AsyncDisplayKit.ASDataController.sizingQueue", DISPATCH_QUEUE_SERIAL); dispatch_queue_set_specific(sizingQueue, kASSizingQueueContext, kASSizingQueueContext, NULL); dispatch_set_target_queue(sizingQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)); }); @@ -332,7 +332,8 @@ withAnimationOptions:(ASDataControllerAnimationOptions)animationOptions }); } -- (void)endUpdates { +- (void)endUpdates +{ [self endUpdatesWithCompletion:NULL]; } diff --git a/AsyncDisplayKit/Details/ASTextNodeWordKerner.m b/AsyncDisplayKit/Details/ASTextNodeWordKerner.m index 0fd7d25004..ffd9655a91 100644 --- a/AsyncDisplayKit/Details/ASTextNodeWordKerner.m +++ b/AsyncDisplayKit/Details/ASTextNodeWordKerner.m @@ -90,7 +90,7 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ spaceSizes = [[NSMapTable alloc] initWithKeyOptions:NSMapTableStrongMemory valueOptions:NSMapTableStrongMemory capacity:1]; - mapQueue = dispatch_queue_create("com.facebook.AsyncDisplayKit.wordKerningQueue", DISPATCH_QUEUE_SERIAL); + mapQueue = dispatch_queue_create("org.AsyncDisplayKit.wordKerningQueue", DISPATCH_QUEUE_SERIAL); }); CGFloat ordinarySpaceWidth; UIFont *font = [layoutManager.textStorage attribute:NSFontAttributeName atIndex:characterIndex effectiveRange:NULL]; diff --git a/AsyncDisplayKit/Details/_ASDisplayLayer.mm b/AsyncDisplayKit/Details/_ASDisplayLayer.mm index 1acee3bd58..1d9b023983 100644 --- a/AsyncDisplayKit/Details/_ASDisplayLayer.mm +++ b/AsyncDisplayKit/Details/_ASDisplayLayer.mm @@ -129,7 +129,7 @@ static dispatch_queue_t displayQueue = NULL; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - displayQueue = dispatch_queue_create("com.facebook.AsyncDisplayKit.ASDisplayLayer.displayQueue", DISPATCH_QUEUE_CONCURRENT); + displayQueue = dispatch_queue_create("org.AsyncDisplayKit.ASDisplayLayer.displayQueue", DISPATCH_QUEUE_CONCURRENT); // we use the highpri queue to prioritize UI rendering over other async operations dispatch_set_target_queue(displayQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)); });