[MacOS] Fix memory management (#1342)

* macOS, Reduce memory usage

* macOS, Fix memory leak
This commit is contained in:
hatoo 2019-12-30 07:16:12 +09:00 committed by Freya Gentz
parent e4451d6786
commit fa7a3025ec
2 changed files with 11 additions and 2 deletions

View file

@ -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();

View file

@ -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();
}
}