diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 9dd1a72aa21..fa0a7d2b066 100644 --- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -326,10 +326,12 @@ static RCTCornerRadii RCTCornerRadiiFromBorderRadii(BorderRadii borderRadii) static RCTBorderColors RCTBorderColorsFromBorderColors(BorderColors borderColors) { - return RCTBorderColors{.left = RCTCGColorRefFromSharedColor(borderColors.left), - .top = RCTCGColorRefFromSharedColor(borderColors.top), - .bottom = RCTCGColorRefFromSharedColor(borderColors.bottom), - .right = RCTCGColorRefFromSharedColor(borderColors.right)}; + return RCTBorderColors{ + .left = RCTCGColorRefUnretainedFromSharedColor(borderColors.left), + .top = RCTCGColorRefUnretainedFromSharedColor(borderColors.top), + .bottom = RCTCGColorRefUnretainedFromSharedColor(borderColors.bottom), + .right = RCTCGColorRefUnretainedFromSharedColor(borderColors.right) + }; } static UIEdgeInsets UIEdgeInsetsFromBorderInsets(EdgeInsets edgeInsets) @@ -396,7 +398,9 @@ static RCTBorderStyle RCTBorderStyleFromBorderStyle(BorderStyle borderStyle) } layer.borderWidth = (CGFloat)borderMetrics.borderWidths.left; - layer.borderColor = RCTCGColorRefFromSharedColor(borderMetrics.borderColors.left); + CGColorRef borderColor = RCTCGColorRefFromSharedColor(borderMetrics.borderColors.left); + layer.borderColor = borderColor; + CGColorRelease(borderColor); layer.cornerRadius = (CGFloat)borderMetrics.borderRadii.topLeft; layer.backgroundColor = _backgroundColor.CGColor; _contentView.layer.cornerRadius = (CGFloat)borderMetrics.borderRadii.topLeft; diff --git a/React/Fabric/RCTConversions.h b/React/Fabric/RCTConversions.h index 16ee3ed2d20..c4d8f407b7d 100644 --- a/React/Fabric/RCTConversions.h +++ b/React/Fabric/RCTConversions.h @@ -30,7 +30,13 @@ inline UIColor *_Nullable RCTUIColorFromSharedColor(const facebook::react::Share return sharedColor ? [UIColor colorWithCGColor:sharedColor.get()] : nil; } -inline CGColorRef RCTCGColorRefFromSharedColor(const facebook::react::SharedColor &sharedColor) { + +inline CF_RETURNS_NOT_RETAINED CGColorRef RCTCGColorRefUnretainedFromSharedColor(const facebook::react::SharedColor &sharedColor) { + return sharedColor ? sharedColor.get() : nil; +} + + +inline CF_RETURNS_RETAINED CGColorRef RCTCGColorRefFromSharedColor(const facebook::react::SharedColor &sharedColor) { return sharedColor ? CGColorCreateCopy(sharedColor.get()) : nil; }