mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
Implementation of Synchronous Concurrency features for AsyncDisplayKit 2.0
This provides internal features on _ASAsyncTransaction and ASDisplayNode to facilitate implementing public API that allows clients to choose if they would prefer to block on the completion of unfinished rendering, rather than allow a placeholder state to become visible. The internal features are: -[_ASAsyncTransaction waitUntilComplete] -[ASDisplayNode recursivelyEnsureDisplay] Also provided are two such implementations: -[ASCellNode setNeverShowPlaceholders:], which integrates with both Tables and Collections -[ASViewController setNeverShowPlaceholders:], which should work with Nav and Tab controllers. Lastly, on ASDisplayNode, a new property .shouldBypassEnsureDisplay allows individual node types to exempt themselves from blocking the main thread on their display. By implementing the feature at the ASCellNode level rather than ASTableView & ASCollectionView, developers can retain fine-grained control on display characteristics. For example, certain cell types may be appropriate to display to the user with placeholders, whereas others may not. Follow-up work will include unit tests, revisiting names, and the header locations of definitions.
This commit is contained in:
37
examples/SynchronousConcurrency/Sample/AsyncViewController.m
Normal file
37
examples/SynchronousConcurrency/Sample/AsyncViewController.m
Normal file
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// AsyncViewController.m
|
||||
// Sample
|
||||
//
|
||||
// Created by Scott Goodson on 9/26/15.
|
||||
// Copyright © 2015 Facebook. All rights reserved.
|
||||
//
|
||||
|
||||
#import "AsyncViewController.h"
|
||||
#import "RandomCoreGraphicsNode.h"
|
||||
|
||||
@implementation AsyncViewController
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
if (!(self = [super initWithNode:[[RandomCoreGraphicsNode alloc] init]])) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
self.neverShowPlaceholders = YES;
|
||||
self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:0];
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated
|
||||
{
|
||||
// FIXME: This is only being called on the first time the UITabBarController shows us.
|
||||
[super viewWillAppear:animated];
|
||||
}
|
||||
|
||||
- (void)viewDidDisappear:(BOOL)animated
|
||||
{
|
||||
[self.node recursivelyClearContents];
|
||||
[super viewDidDisappear:animated];
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user