DO NOT MERGE: Issue 2106: Live Preview Snapshot

This is a PR for issue #2106.
Personally, I tend to purposely implement the retain cycle, and capture self. My feelings are that implementing the retain cycle is a pattern that's slightly less prone to breakage (i.e. someone in the future unknowingly modifies code in that block, and the modifications rely on self/properties being available, or it causes an exception to be thrown/other unexpected behavior).

Assuming this doesn't lead to lots of memory staying used or there's any kind of memory pressure, the cost of purposely implementing the retain cycle seems minimal enough to be acceptable (especially given the memory of modern devices).

This is also a decidedly robust design pattern, so I can definitely see the argument for just going with a `weakSelf`, too. :)