Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.

Commit f91e008

Browse files
committed
Merge pull request #715 from Adlai-Holler/DeeperCompares
Expand usage of ASObjectIsEqual to clean up / encourage fast-path compares.
2 parents 2e5da55 + 1801620 commit f91e008

File tree

5 files changed

+24
-26
lines changed

5 files changed

+24
-26
lines changed

AsyncDisplayKit/ASEditableTextNode.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ - (NSDictionary *)typingAttributes
217217

218218
- (void)setTypingAttributes:(NSDictionary *)typingAttributes
219219
{
220-
if (_typingAttributes == typingAttributes)
220+
if (ASObjectIsEqual(typingAttributes, _typingAttributes))
221221
return;
222222

223223
_typingAttributes = [typingAttributes copy];

AsyncDisplayKit/ASImageNode.mm

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#import "ASImageNode+CGExtras.h"
1919

2020
#import "ASInternalHelpers.h"
21+
#import "ASEqualityHelpers.h"
2122

2223
@interface _ASImageNodeDrawParameters : NSObject
2324

@@ -123,7 +124,7 @@ - (CGSize)calculateSizeThatFits:(CGSize)constrainedSize
123124
- (void)setImage:(UIImage *)image
124125
{
125126
ASDN::MutexLocker l(_imageLock);
126-
if (_image != image) {
127+
if (!ASObjectIsEqual(_image, image)) {
127128
_image = image;
128129

129130
ASDN::MutexUnlocker u(_imageLock);

AsyncDisplayKit/ASNetworkImageNode.mm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#import "ASBasicImageDownloader.h"
1212
#import "ASDisplayNode+Subclasses.h"
1313
#import "ASThread.h"
14-
14+
#import "ASEqualityHelpers.h"
1515

1616
@interface ASNetworkImageNode ()
1717
{
@@ -70,7 +70,7 @@ - (void)setURL:(NSURL *)URL resetToDefault:(BOOL)reset
7070
{
7171
ASDN::MutexLocker l(_lock);
7272

73-
if (URL == _URL || [URL isEqual:_URL]) {
73+
if (ASObjectIsEqual(URL, _URL)) {
7474
return;
7575
}
7676

@@ -96,7 +96,7 @@ - (void)setDefaultImage:(UIImage *)defaultImage
9696
{
9797
ASDN::MutexLocker l(_lock);
9898

99-
if (defaultImage == _defaultImage || [defaultImage isEqual:_defaultImage]) {
99+
if (ASObjectIsEqual(defaultImage, _defaultImage)) {
100100
return;
101101
}
102102
_defaultImage = defaultImage;

AsyncDisplayKit/ASTextNode.mm

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#import "ASTextNodeRenderer.h"
2121
#import "ASTextNodeShadower.h"
22+
#import "ASEqualityHelpers.h"
2223

2324
static const NSTimeInterval ASTextNodeHighlightFadeOutDuration = 0.15;
2425
static const NSTimeInterval ASTextNodeHighlightFadeInDuration = 0.1;
@@ -315,7 +316,7 @@ - (void)_invalidateShadower
315316
#pragma mark - Modifying User Text
316317

317318
- (void)setAttributedString:(NSAttributedString *)attributedString {
318-
if (attributedString == _attributedString) {
319+
if (ASObjectIsEqual(attributedString, _attributedString)) {
319320
return;
320321
}
321322

@@ -349,14 +350,16 @@ - (void)setAttributedString:(NSAttributedString *)attributedString {
349350

350351
- (void)setExclusionPaths:(NSArray *)exclusionPaths
351352
{
352-
if ((_exclusionPaths == nil && exclusionPaths != nil) || (![_exclusionPaths isEqualToArray:exclusionPaths])) {
353-
_exclusionPaths = exclusionPaths;
354-
[self _invalidateRenderer];
355-
[self invalidateCalculatedLayout];
356-
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
357-
[self setNeedsDisplay];
358-
});
353+
if (ASObjectIsEqual(exclusionPaths, _exclusionPaths)) {
354+
return;
359355
}
356+
357+
_exclusionPaths = [exclusionPaths copy];
358+
[self _invalidateRenderer];
359+
[self invalidateCalculatedLayout];
360+
ASDisplayNodeRespectThreadAffinityOfNode(self, ^{
361+
[self setNeedsDisplay];
362+
});
360363
}
361364

362365
- (NSArray *)exclusionPaths
@@ -965,28 +968,22 @@ - (UIEdgeInsets)shadowPadding
965968

966969
- (void)setTruncationAttributedString:(NSAttributedString *)truncationAttributedString
967970
{
968-
// No-op if they're exactly equal (avoid redrawing)
969-
if (_truncationAttributedString == truncationAttributedString) {
971+
if (ASObjectIsEqual(_truncationAttributedString, truncationAttributedString)) {
970972
return;
971973
}
972974

973-
if (![_truncationAttributedString isEqual:truncationAttributedString]) {
974-
_truncationAttributedString = [truncationAttributedString copy];
975-
[self _invalidateTruncationString];
976-
}
975+
_truncationAttributedString = [truncationAttributedString copy];
976+
[self _invalidateTruncationString];
977977
}
978978

979979
- (void)setAdditionalTruncationMessage:(NSAttributedString *)additionalTruncationMessage
980980
{
981-
// Short circuit if we're setting to nil (prevent redrawing when we don't need to)
982-
if (_additionalTruncationMessage == additionalTruncationMessage) {
981+
if (ASObjectIsEqual(_additionalTruncationMessage, additionalTruncationMessage)) {
983982
return;
984983
}
985984

986-
if (![_additionalTruncationMessage isEqual:additionalTruncationMessage]) {
987-
_additionalTruncationMessage = [additionalTruncationMessage copy];
988-
[self _invalidateTruncationString];
989-
}
985+
_additionalTruncationMessage = [additionalTruncationMessage copy];
986+
[self _invalidateTruncationString];
990987
}
991988

992989
- (void)setTruncationMode:(NSLineBreakMode)truncationMode

AsyncDisplayKit/Details/ASTextNodeCoreTextAdditions.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ BOOL ASAttributeWithNameIsUnsupportedCoreTextAttribute(NSString *attributeName)
149149

150150
return cleanAttributedString;
151151
} else {
152-
return dirtyAttributedString;
152+
return [dirtyAttributedString copy];
153153
}
154154
}
155155

0 commit comments

Comments
 (0)