Разве «утечка» - это не просто «1001» синглтон? Я не уверен, как работает обнаружение утечек, но с определенной точки зрения большинство синглетонов имеют утечки , поскольку они освобождают память только после выхода из приложения.
Если это действительно так, то это зависит от того, нужно ли вам освободить память, используемую звуками. Использование памяти не должно увеличиваться, поэтому вам не нужно беспокоиться о сценарии «традиционной утечки», когда ваше приложение занимает все больше и больше памяти, пока оно не будет уничтожено. Код, который вы используете, похоже, не поддерживает выгрузку звука, поэтому, если вы хотите освободить память, вам придется добавить этот код самостоятельно.
И личная точка зрения: написание движка со звуковыми эффектами с использованием синглтона не является хорошим дизайном. Управление звуками становится болью (это именно та проблема, с которой вы сталкиваетесь), синглтон добавляет много ненужного стандартного кода и т. Д. Я не вижу причин, по которым звуки не должны быть простыми отдельными объектами со своим собственным жизненным циклом - это способ Я сделал это в моей попытке использовать движок OpenAL SFX . Конечно, я могу ошибаться.
Обновление: Я полагаю, что магическое «назначение здесь не сделано» является ключом. Единый код взят из документации Apple , но кто-то вставил дополнительное назначение. Метод sharedFoo
должен выглядеть следующим образом:
+ (MyGizmoClass*)sharedManager
{
@synchronized(self) {
if (sharedGizmoManager == nil) {
[[self alloc] init]; // assignment not done here
}
}
return sharedGizmoManager;
}
Когда вы выполняете дополнительное присвоение self
, вы создаете искомую утечку.