gitmyhub

AsyncDisplayKit

Objective-C++ ★ 13k updated 7y ago ▣ archived

Smooth asynchronous user interfaces for iOS apps.

AsyncDisplayKit (now Texture) was a Facebook-created iOS framework that moved expensive UI work like image decoding and text layout to background threads, keeping apps smooth at 60 fps during heavy scrolling.

Objective-C++Objective-CiOSsetup: hardcomplexity 3/5

AsyncDisplayKit was a framework for building smooth, responsive user interfaces in iOS apps. It was created by Facebook to solve a common problem: on a phone, all drawing and layout work typically runs on a single thread called the main thread, which is also responsible for responding to every tap and scroll. If the app tries to do too much on that thread at once, the screen stutters and frames get dropped, which makes the app feel slow or unresponsive.

The library's core idea was to move expensive UI operations, such as decoding images, measuring text, and laying out views, off the main thread so they could happen in the background. It introduced a concept called "nodes," which are thread-safe versions of the standard iOS view building blocks. Because nodes could be created and configured on background threads, the main thread stayed free to handle user interaction and keep animations running at a smooth 60 frames per second.

The framework also addressed practical annoyances in iOS development, such as bugs that arise when reusing table or collection view cells, and the complexity of preloading data before a user scrolls to it. It was used in production in apps including Facebook, Pinterest, and others that needed to handle large amounts of dynamic content.

This repository is now archived. The project was renamed to Texture and moved to a new home under the TextureGroup organization on GitHub. The README here redirects visitors to that new location. If you are looking for the actively maintained version of this code, the Texture repository is where development continued after Facebook transferred ownership.

The original code was BSD-licensed.

Where it fits