In at least some cases, _pendingDisplayNodes referencing self can cause the
object to live longer than the application needs, while tearing down views.
It also appears there may be a cancellation condition where this state is
not balanced properly, which can cause a reference-cycle leak. This change
safely fixes this problem when tested against a repro case for it.
I'm filing a followup task to make sure all cancellation edge cases have
proper accounting for this codepath, even though the leak is fixed.
* Add tests for how UICV/ASCV will throw if you update before the initial data load
* Allow user to submit updates before initial data load to workaround UICollectionView bug
* Add some info
- Objects conform to ASSectionContext protocol can be provided via ASCollectionDataSource and later retrieved from the collection view. They are guaranteed to be in sync with sections of the collection view. They can be used to store additional data associated with each section, to be used in collection view layout and the like.
- ASSection is an internal object that is the foundation for coming debugging tools.
- Unit tests included.
* Remove old deprecated methods. Will restore ones that were removed recently based on PR.
* Update example to use non-deprecated method.
* Don't remove locking / unlocking, insets or willDisplayNode deprecated methods yet.
* Add tests for batch update completion handler calling
* Ensure we call all completion handlers after collection view updates
* Tweak it
* Fix the doc
* Minor improvements
* Document addCompletionHandler better
This reverts commit 37416f1696.
We are reverting this commit only for Pinterest. The new default of stretch will be maintained on
ASDK master, and when Pinterest syncs to this in 1-2 weeks, we'll communicate to the team about
the new default.
The small number of changes that were made to address code that was relying on Start (previous default)
will continue to work safely, because they'll just be re-setting the value to Start which is now default again.
After the full adoption of ASDK 2.0 APIs, the default will become Stretch again (for alignItems).
* [ASVideoNode] Maintain playback position between visibility changes
* [ASVideoNode] Code style changes and moved the pause to be before caching the current playback time.
* Measure performance for ASCellNode layout
* Address Adlai and Levi's feedback:
* Move to ASDisplayNode level
* Lock around setting/getting measurement options and results
* Record all measurement passes and report times as an array
* Only add relevant entries to the performanceMetrics dictionary
* Rebase
* Store sum and count instead of array
* Rename ScopeTimerDataPoint to ScopeTimerSum
* Address Levi's feedback
* Address Adlai's feedback
The previous code used either a `@property` with `assign, nonatomic` semantics, or a `__unsafe_unretained` (non-atomic) ivar pointer to an instance for `asyncdisplaykit_node`.
This commit changes those access so that they have the equivalent of `weak, atomic` semantics.
- `_ASDisplayView.mm`
- Removes the `_node` ivar that was qualified with `__unsafe_unretained`.
- Removes `@synthesize asyncdisplaykit_node = _node;`.
- All direct uses of `_node` were replaced with:
- Creates a strong reference via `ASDisplayNode *node = _asyncdisplaykit_node;`.
- `s/_node/node/`.
- These changes were made even if there's a single use of `_asyncdisplaykit_node` as a consistency / defensive measure so that anyone editing this code in the future does not accidentally use a `weak` reference twice.
- `ASDisplayNode.mm`
- Getters and setters for `asyncdisplaykit_node` were changed from `nonatomic, assign` semantics to the equivalent of `atomic, weak` semantics.
- `weak` semantics were implemented by using a `ASWeakProxy` object.
- `objc_setAssociatedObject` was changed from `OBJC_ASSOCIATION_ASSIGN` to `OBJC_ASSOCIATION_RETAIN` (the `atomic` version of retain).
- `ASDisplayNode+FrameworkPrivate.h`
- Changed the `@property` declarations for `asyncdisplaykit_node` from `nonatomic, assign` to `atomic, weak`.
- The actual getters and setters are implemented in `ASDisplayNode.mm`, which were changed accordingly.