diff --git a/src/platform_impl/macos/app_state.rs b/src/platform_impl/macos/app_state.rs
index 67de6ce6..626b95fc 100644
--- a/src/platform_impl/macos/app_state.rs
+++ b/src/platform_impl/macos/app_state.rs
@@ -11,7 +11,11 @@ use std::{
     time::Instant,
 };
 
-use cocoa::{appkit::NSApp, base::nil, foundation::NSString};
+use cocoa::{
+    appkit::NSApp,
+    base::nil,
+    foundation::{NSAutoreleasePool, NSString},
+};
 
 use crate::{
     event::{Event, StartCause},
@@ -277,6 +281,8 @@ impl AppState {
             unsafe {
                 let _: () = msg_send![NSApp(), stop: nil];
 
+                let pool = NSAutoreleasePool::new(nil);
+
                 let windows: *const Object = msg_send![NSApp(), windows];
                 let window: *const Object = msg_send![windows, objectAtIndex:0];
                 assert_ne!(window, nil);
@@ -292,6 +298,8 @@ impl AppState {
                 let _: () = msg_send![window, setTitle: some_unique_title];
                 // And restore it.
                 let _: () = msg_send![window, setTitle: title];
+
+                pool.drain();
             };
         }
         HANDLER.update_start_time();
diff --git a/src/platform_impl/macos/event_loop.rs b/src/platform_impl/macos/event_loop.rs
index 8469e3ff..57e07b92 100644
--- a/src/platform_impl/macos/event_loop.rs
+++ b/src/platform_impl/macos/event_loop.rs
@@ -95,12 +95,13 @@ impl<T> EventLoop<T> {
         F: FnMut(Event<T>, &RootWindowTarget<T>, &mut ControlFlow),
     {
         unsafe {
-            let _pool = NSAutoreleasePool::new(nil);
+            let pool = NSAutoreleasePool::new(nil);
             let app = NSApp();
             assert_ne!(app, nil);
             AppState::set_callback(callback, Rc::clone(&self.window_target));
             let _: () = msg_send![app, run];
             AppState::exit();
+            pool.drain();
         }
     }