Fix intermittent CALayerInvalidGeometry crash after memory warning #45
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #44
I could reproduce this crash by mashing cmd-shift-m to trigger memory warnings around the time JDFlipNumberView is laying out. This crash was caused by
_topImages
getting cleared out upon memory warning. Here's the sequence of events:_topImages
is clearedJDFlipNumberView
layoutSubviews is calledJDFlipNumberDigitView
'ssizeThatFits:
method calls[self imageSize]
which calls[factory imageSizeForBundleNamed:self.imageBundleName]
imageSizeForBundleNamed:
doesn't recreate_topImages
so the size is returned asCGSizeZero
JDFlipNumberDigitView
'ssizeThatFits:
runs the lineCGFloat origRatioW = imageSize.width/(imageSize.height*2);
, resulting in aNaN
(divide by 0)NaN
is set as the height for theJDFlipNumberDigitView
's frameCALayerInvalidGeometry
crashThis fixes the issue by using
topImagesForBundleNamed:
instead of accessingtopImages
directly.topImagesForBundleNamed:
recreates thetopImages
if they're not available.