Closed kuserhii closed 7 months ago
Released errorRef object which is not managed by ARC to fix memory leak
Xcode 14.3, iOS 16.4
https://github.com/oblador/react-native-vector-icons/issues/1499
Into loadFontWithFileName func we call CTFontManagerRegisterGraphicsFont whitch have parameter with type CFErrorRef * which is not managed by ARC.
loadFontWithFileName
Proposed fix in RNVectorIconsManager.m:
To avoid memory leak we need to release that errorRef varible after usage.
RCT_EXPORT_METHOD(loadFontWithFileName:(NSString *)fontFileName extension:(NSString *)extension resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { NSBundle *bundle = [NSBundle bundleForClass:[self class]]; NSURL *fontURL = [bundle URLForResource:fontFileName withExtension:extension]; NSData *fontData = [NSData dataWithContentsOfURL:fontURL]; CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)fontData); CGFontRef font = CGFontCreateWithDataProvider(provider); if (font) { CFErrorRef errorRef = NULL; if (CTFontManagerRegisterGraphicsFont(font, &errorRef) == NO) { NSError *error = (__bridge NSError *)errorRef; if (error.code == kCTFontManagerErrorAlreadyRegistered) { resolve(nil); } else { reject(@"font_load_failed", @"Font failed to load", error); } } else { resolve(nil); } if (errorRef) { CFRelease(errorRef); } CFRelease(font); } if (provider) { CFRelease(provider); } }
Here we add
if (errorRef) { CFRelease(errorRef); }
Test project with memory leak https://github.com/kuserhii/ReactNativeVectorIconMemoryLeak
@oblador This looks reasonable but I don't know enough about swift and couldn't find any docs on who is responsible for the memory release. Can you take a look?
Released errorRef object which is not managed by ARC to fix memory leak
Environment
Xcode 14.3, iOS 16.4
Opened issue
https://github.com/oblador/react-native-vector-icons/issues/1499
Description
Into
loadFontWithFileName
func we call CTFontManagerRegisterGraphicsFont whitch have parameter with type CFErrorRef * which is not managed by ARC.Proposed fix
Proposed fix in RNVectorIconsManager.m:
To avoid memory leak we need to release that errorRef varible after usage.
Here we add
Reproducible Demo
Test project with memory leak https://github.com/kuserhii/ReactNativeVectorIconMemoryLeak