From e3f0e66cb3b0e9aa653193603840666ad00e6d96 Mon Sep 17 00:00:00 2001 From: Scott Goodson Date: Thu, 21 May 2015 22:43:38 -1000 Subject: [PATCH] Updating API names for network range and memory culling before ASDK 1.2 tag. --- AsyncDisplayKit/ASDisplayNode+Subclasses.h | 15 +++++---- AsyncDisplayKit/ASDisplayNode.h | 16 +++++----- AsyncDisplayKit/ASDisplayNode.mm | 32 +++++++++---------- AsyncDisplayKit/ASMultiplexImageNode.mm | 10 +++--- AsyncDisplayKit/ASNetworkImageNode.mm | 10 +++--- AsyncDisplayKit/ASTextNode.mm | 4 +-- .../Details/ASRangeHandlerPreload.mm | 4 +-- .../Details/ASRangeHandlerRender.mm | 2 +- .../ASBasicImageDownloaderContextTests.m | 2 ++ Podfile.lock | 2 +- 10 files changed, 50 insertions(+), 47 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode+Subclasses.h b/AsyncDisplayKit/ASDisplayNode+Subclasses.h index 303f6c1a18..38c089aa98 100644 --- a/AsyncDisplayKit/ASDisplayNode+Subclasses.h +++ b/AsyncDisplayKit/ASDisplayNode+Subclasses.h @@ -190,8 +190,9 @@ * * @discussion Subclasses may override this method to be notified when they should begin to fetch data. Fetching * should be done asynchronously. The node is also responsible for managing the memory of any data. + * The data may be remote and accessed via the network, but could also be a local database query. */ -- (void)fetchRemoteData ASDISPLAYNODE_REQUIRES_SUPER; +- (void)fetchData ASDISPLAYNODE_REQUIRES_SUPER; /** * @abstract Indicates that the receiver is about to display its subnodes. This method is not called if there are no @@ -323,18 +324,18 @@ * Provides an opportunity to clear backing store and other memory-intensive intermediates, such as text layout managers * on the current node. * - * @discussion Called by -recursivelyClearRendering. Base class implements self.contents = nil, clearing any backing + * @discussion Called by -recursivelyClearContents. Base class implements self.contents = nil, clearing any backing * store, for asynchronous regeneration when needed. */ -- (void)clearRendering ASDISPLAYNODE_REQUIRES_SUPER; +- (void)clearContents ASDISPLAYNODE_REQUIRES_SUPER; /** - * Provides an opportunity to clear any remote data on the current node. + * Provides an opportunity to clear any fetched data (e.g. remote / network or database-queried) on the current node. * - * @discussion This will not clear data recursively for all subnodes. Either call -recursivelyClearRemoteData or - * selectively clear remote data. + * @discussion This will not clear data recursively for all subnodes. Either call -recursivelyClearFetchedData or + * selectively clear fetched data. */ -- (void)clearRemoteData ASDISPLAYNODE_REQUIRES_SUPER; +- (void)clearFetchedData ASDISPLAYNODE_REQUIRES_SUPER; /** @name Placeholders */ diff --git a/AsyncDisplayKit/ASDisplayNode.h b/AsyncDisplayKit/ASDisplayNode.h index 2fed3d8fb8..a0d0fa1bd0 100644 --- a/AsyncDisplayKit/ASDisplayNode.h +++ b/AsyncDisplayKit/ASDisplayNode.h @@ -312,7 +312,7 @@ typedef CALayer *(^ASDisplayNodeLayerBlock)(); - (void)recursivelySetDisplaySuspended:(BOOL)flag; /** - * @abstract Calls -clearRendering on the receiver and its subnode hierarchy. + * @abstract Calls -clearContents on the receiver and its subnode hierarchy. * * @discussion Clears backing stores and other memory-intensive intermediates. * If the node is removed from a visible hierarchy and then re-added, it will automatically trigger a new asynchronous display, @@ -322,27 +322,27 @@ typedef CALayer *(^ASDisplayNodeLayerBlock)(); * @see displaySuspended and setNeedsDisplay */ -- (void)recursivelyClearRendering; +- (void)recursivelyClearContents; /** - * @abstract Calls -clearRemoteData on the receiver and its subnode hierarchy. + * @abstract Calls -clearFetchedData on the receiver and its subnode hierarchy. * * @discussion Clears any memory-intensive fetched content. * This method is used to notify the node that it should purge any content that is both expensive to fetch and to * retain in memory. * - * @see clearRemoteData and fetchRemoteData + * @see clearFetchedData and fetchData */ -- (void)recursivelyClearRemoteData; +- (void)recursivelyClearFetchedData; /** - * @abstract Calls -fetchRemoteData on the receiver and its subnode hierarchy. + * @abstract Calls -fetchData on the receiver and its subnode hierarchy. * * @discussion Fetches content from remote sources for the current node and all subnodes. * - * @see fetchRemoteData and clearRemoteData + * @see fetchData and clearFetchedData */ -- (void)recursivelyFetchRemoteData; +- (void)recursivelyFetchData; /** * @abstract Toggle displaying a placeholder over the node that covers content until the node and all subnodes are diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 614e4c833b..57c291e3bb 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -90,8 +90,8 @@ void ASDisplayNodePerformBlockOnMainThread(void (^block)()) // Subclasses should never override these ASDisplayNodeAssert(!ASDisplayNodeSubclassOverridesSelector(self, @selector(calculatedSize)), @"Subclass %@ must not override calculatedSize method", NSStringFromClass(self)); ASDisplayNodeAssert(!ASDisplayNodeSubclassOverridesSelector(self, @selector(measure:)), @"Subclass %@ must not override measure method", NSStringFromClass(self)); - ASDisplayNodeAssert(!ASDisplayNodeSubclassOverridesSelector(self, @selector(recursivelyClearRendering)), @"Subclass %@ must not override recursivelyClearRendering method", NSStringFromClass(self)); - ASDisplayNodeAssert(!ASDisplayNodeSubclassOverridesSelector(self, @selector(recursivelyClearRemoteData)), @"Subclass %@ must not override recursivelyClearRemoteData method", NSStringFromClass(self)); + ASDisplayNodeAssert(!ASDisplayNodeSubclassOverridesSelector(self, @selector(recursivelyClearContents)), @"Subclass %@ must not override recursivelyClearContents method", NSStringFromClass(self)); + ASDisplayNodeAssert(!ASDisplayNodeSubclassOverridesSelector(self, @selector(recursivelyClearFetchedData)), @"Subclass %@ must not override recursivelyClearFetchedData method", NSStringFromClass(self)); } + (BOOL)layerBackedNodesEnabled @@ -1329,44 +1329,44 @@ static NSInteger incrementIfFound(NSInteger i) { [self __exitedHierarchy]; } -- (void)clearRendering +- (void)clearContents { self.layer.contents = nil; _placeholderLayer.contents = nil; } -- (void)recursivelyClearRendering +- (void)recursivelyClearContents { for (ASDisplayNode *subnode in self.subnodes) { - [subnode recursivelyClearRendering]; + [subnode recursivelyClearContents]; } - [self clearRendering]; + [self clearContents]; } -- (void)fetchRemoteData +- (void)fetchData { // subclass override } -- (void)recursivelyFetchRemoteData +- (void)recursivelyFetchData { for (ASDisplayNode *subnode in self.subnodes) { - [subnode recursivelyFetchRemoteData]; + [subnode recursivelyFetchData]; } - [self fetchRemoteData]; + [self fetchData]; } -- (void)clearRemoteData +- (void)clearFetchedData { // subclass override } -- (void)recursivelyClearRemoteData +- (void)recursivelyClearFetchedData { for (ASDisplayNode *subnode in self.subnodes) { - [subnode recursivelyClearRemoteData]; + [subnode recursivelyClearFetchedData]; } - [self clearRemoteData]; + [self clearFetchedData]; } - (void)layout @@ -1816,12 +1816,12 @@ static const char *ASDisplayNodeAssociatedNodeKey = "ASAssociatedNode"; - (void)reclaimMemory { - [self clearRendering]; + [self clearContents]; } - (void)recursivelyReclaimMemory { - [self recursivelyClearRendering]; + [self recursivelyClearContents]; } @end diff --git a/AsyncDisplayKit/ASMultiplexImageNode.mm b/AsyncDisplayKit/ASMultiplexImageNode.mm index b618228ce4..0bc9c6e8f8 100644 --- a/AsyncDisplayKit/ASMultiplexImageNode.mm +++ b/AsyncDisplayKit/ASMultiplexImageNode.mm @@ -162,9 +162,9 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent } #pragma mark - ASDisplayNode Overrides -- (void)clearRendering +- (void)clearContents { - [super clearRendering]; // This actually clears the contents, so we need to do this first for our displayedImageIdentifier to be meaningful. + [super clearContents]; // This actually clears the contents, so we need to do this first for our displayedImageIdentifier to be meaningful. [self _setDisplayedImageIdentifier:nil withImage:nil]; if (_downloadIdentifier) { @@ -177,12 +177,12 @@ typedef void(^ASMultiplexImageLoadCompletionBlock)(UIImage *image, id imageIdent { [super displayWillStart]; - [self fetchRemoteData]; + [self fetchData]; } -- (void)fetchRemoteData +- (void)fetchData { - [super fetchRemoteData]; + [super fetchData]; [self _loadImageIdentifiers]; } diff --git a/AsyncDisplayKit/ASNetworkImageNode.mm b/AsyncDisplayKit/ASNetworkImageNode.mm index c21d5ea402..658176eeee 100644 --- a/AsyncDisplayKit/ASNetworkImageNode.mm +++ b/AsyncDisplayKit/ASNetworkImageNode.mm @@ -127,12 +127,12 @@ { [super displayWillStart]; - [self fetchRemoteData]; + [self fetchData]; } -- (void)clearRemoteData +- (void)clearFetchedData { - [super clearRemoteData]; + [super clearFetchedData]; { ASDN::MutexLocker l(_lock); @@ -143,9 +143,9 @@ } } -- (void)fetchRemoteData +- (void)fetchData { - [super fetchRemoteData]; + [super fetchData]; { ASDN::MutexLocker l(_lock); diff --git a/AsyncDisplayKit/ASTextNode.mm b/AsyncDisplayKit/ASTextNode.mm index 85c4640edc..141ad9a58e 100644 --- a/AsyncDisplayKit/ASTextNode.mm +++ b/AsyncDisplayKit/ASTextNode.mm @@ -226,12 +226,12 @@ ASDISPLAYNODE_INLINE CGFloat ceilPixelValue(CGFloat f) [self _invalidateRenderer]; } -- (void)clearRendering +- (void)clearContents { // We discard the backing store and renderer to prevent the very large // memory overhead of maintaining these for all text nodes. They can be // regenerated when layout is necessary. - [super clearRendering]; // ASDisplayNode will set layer.contents = nil + [super clearContents]; // ASDisplayNode will set layer.contents = nil [self _invalidateRenderer]; } diff --git a/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm b/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm index d18fef070c..d30f6c1a40 100644 --- a/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm +++ b/AsyncDisplayKit/Details/ASRangeHandlerPreload.mm @@ -16,13 +16,13 @@ - (void)node:(ASDisplayNode *)node enteredRangeOfType:(ASLayoutRangeType)rangeType { ASDisplayNodeAssert(rangeType == ASLayoutRangeTypePreload, @"Preload delegate should not handle other ranges"); - [node recursivelyFetchRemoteData]; + [node recursivelyFetchData]; } - (void)node:(ASDisplayNode *)node exitedRangeOfType:(ASLayoutRangeType)rangeType { ASDisplayNodeAssert(rangeType == ASLayoutRangeTypePreload, @"Preload delegate should not handle other ranges"); - [node recursivelyClearRemoteData]; + [node recursivelyClearFetchedData]; } @end diff --git a/AsyncDisplayKit/Details/ASRangeHandlerRender.mm b/AsyncDisplayKit/Details/ASRangeHandlerRender.mm index ac83bcda3c..9d39bf069d 100644 --- a/AsyncDisplayKit/Details/ASRangeHandlerRender.mm +++ b/AsyncDisplayKit/Details/ASRangeHandlerRender.mm @@ -50,7 +50,7 @@ [node recursivelySetDisplaySuspended:YES]; [node.view removeFromSuperview]; - [node recursivelyClearRendering]; + [node recursivelyClearContents]; } @end diff --git a/AsyncDisplayKitTests/ASBasicImageDownloaderContextTests.m b/AsyncDisplayKitTests/ASBasicImageDownloaderContextTests.m index d1474f5ad6..47ce631ef6 100644 --- a/AsyncDisplayKitTests/ASBasicImageDownloaderContextTests.m +++ b/AsyncDisplayKitTests/ASBasicImageDownloaderContextTests.m @@ -42,6 +42,7 @@ XCTAssert([context isCancelled], @"Context should be cancelled"); } +/* This test is currently unreliable. See https://github.com/facebook/AsyncDisplayKit/issues/459 - (void)testAsyncContextInvalidation { NSURL *url = [self randomURL]; @@ -56,6 +57,7 @@ [context cancel]; [self waitForExpectationsWithTimeout:30.0 handler:nil]; } +*/ - (void)testContextSessionCanceled { diff --git a/Podfile.lock b/Podfile.lock index 5b4f96cb2d..be3eb97915 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -10,4 +10,4 @@ SPEC CHECKSUMS: FBSnapshotTestCase: 3dc3899168747a0319c5278f5b3445c13a6532dd OCMock: a6a7dc0e3997fb9f35d99f72528698ebf60d64f2 -COCOAPODS: 0.36.3 +COCOAPODS: 0.37.1