If an IdleManager or TimeoutManager had been scheduled, it would not get destroyed until it was executed by the main loop, causing criticals if the objects enclosed by its callback had been destroyed.
This adds a weak reference to the manager object itself when scheduling on the main loop, so it can get safely dropped.