Optimizing UITableViewCell For Fast Scrolling
Switch branches/tags
Nothing to show
Clone or download
diwu Merge pull request #9 from bryant1410/master
Fix broken headings in Markdown files
Latest commit 356788d Apr 18, 2017



Your code usually has less than ten milliseconds to run before it causes a frame drop.1

Build Status

Visualize Bad Drawings On The Fly

Injects 4 classes:

  • UITableViewCell
  • UICollectionViewCell
  • UITableViewHeaderFooterView
  • UICollectionReusableView (as footers/headers)

Monitors 6 time sensitive API calls:

  • [UIView drawRect:]
  • tableView:cellForRowAtIndexPath:
  • tableView:viewForHeaderInSection:
  • tableView:viewForFooterInSection:
  • collectionView:cellForItemAtIndexPath:
  • collectionView:viewForSupplementaryElementOfKind:atIndexPath:

Visualizes bad drawing code in 2 ways:

  • Displays non-recycled UIView, CALayer and UIImage objects with bold red bolders.
  • Displays the time it takes to complete each time sensitive API calls, in milliseconds.


Step 1: Drop DWURecyclingAlert.m into your project, Swift or ObjC.

Step 2: There's no step 2.

(Optionally) Using CocoaPods and manually start the injection:

pod 'DWURecyclingAlert'

Then manually start injection by running the following function anywhere in your project:

void Inject_DWURecyclingAlert();

UI Configuration

It's likely that your project happens to use lots of [UIColor redColor] here and there. Or, maybe you want to localize the millisecond warning string with your team's first language. Take a look at the UI Configuration section and customize them the way you like.

How It Works

Method swizzling and associated objects. You could always read the source.

Disabled in Release By Default

DWURecyclingAlert.m requires the DEBUG macro to compile and run. As a result, it's disabled in Release by default. If you also want to disable it in debug builds, comment out the DWURecyclingAlertEnabled macro at the top of the file.


  • Whether your cell / header / footer are created by code or by nib/storyboard, DWURecyclingAlert.m has a way to scan it.
  • It's perfectly normal for a cell to have multiple subviews that override drawRect:, if that's the case, DWURecyclingAlert.m will calculate the sum for all the time it takes to go through each drawRect: call.
  • DWURecyclingAlert.m requires iOS 6 or higher to compile.

Example Project

Inside this repo you can find the RecyclingAlert example project.


DWURecyclingAlert is released under the MIT license. See LICENSE for details.

1: Facebook AsyncDisplayKit Guide. (http://asyncdisplaykit.org/guide)