In AudioKitSynthOne/Manager/Manager+callbacks.swift, retain loops are created by the callbacks. Search for callback = { in your codebase and you'll find more.
The callbacks need to be of the form
myWidget.callback = { [weak self] in
guard let strongSelf = self else { return }
// do stuff with strongSelf
}
This isn't a big deal for a stand-alone app (though, it's considered bad form), but if you ever want to make an AudioUnit Extension, the leaks will become an issue.
Timers are also a source of retain loops, as well as simply creating cycles between view controllers, etc.
You can use Xcode's Memory Graph Debugger to find them, though it's still not very easy.
In
AudioKitSynthOne/Manager/Manager+callbacks.swift
, retain loops are created by the callbacks. Search forcallback = {
in your codebase and you'll find more.The callbacks need to be of the form
This isn't a big deal for a stand-alone app (though, it's considered bad form), but if you ever want to make an AudioUnit Extension, the leaks will become an issue.
Timers are also a source of retain loops, as well as simply creating cycles between view controllers, etc.
You can use Xcode's Memory Graph Debugger to find them, though it's still not very easy.