From 7cad336013476f20e4596efec155ea1179c5878f Mon Sep 17 00:00:00 2001 From: SvyatoslavScherbina Date: Tue, 9 Jun 2020 10:51:07 +0300 Subject: [PATCH] Workaround false-positive memory leak detected in objc sample --- samples/objc/src/objcMain/kotlin/Window.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/samples/objc/src/objcMain/kotlin/Window.kt b/samples/objc/src/objcMain/kotlin/Window.kt index d2a217df6ed..29a1024fbce 100644 --- a/samples/objc/src/objcMain/kotlin/Window.kt +++ b/samples/objc/src/objcMain/kotlin/Window.kt @@ -157,12 +157,20 @@ class MyAppDelegate() : NSObject(), NSApplicationDelegateProtocol { backgroundColor = NSColor.grayColor() releasedWhenClosed = false - delegate = object : NSObject(), NSWindowDelegateProtocol { + val delegateImpl = object : NSObject(), NSWindowDelegateProtocol { override fun windowShouldClose(sender: NSWindow): Boolean { NSApplication.sharedApplication().stop(this) return true } } + + // Wrapping to autoreleasepool is a workaround for false-positive memory leak detected: + // NSWindow.delegate setter appears to put the delegate to autorelease pool. + // Since this code runs during top-level val initializer, it misses the autoreleasepool in [main], + // so the object gets released too late. + autoreleasepool { + delegate = delegateImpl + } } val buttonPress = NSButton(NSMakeRect(10.0, 10.0, 100.0, 40.0)).apply {