mirror of
https://github.com/rust-windowing/winit.git
synced 2026-06-27 07:03:15 -04:00
[MacOS] Fix memory management (#1342)
* macOS, Reduce memory usage * macOS, Fix memory leak
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user