Используя Ubuntu 12.04 + XFCE4.10 (от ppa). У меня также была эта проблема. ЗАФИКСИРОВАННЫЙ (вид прочь): меню стало видимым, когда я отключил составление композита дисплея. (Главное меню-> Настройки-> менеджер по Настройкам-> Тонкие настройки Менеджера окон-> Наборщик-> Включает составление композита дисплея.
Насколько я видел, ваш код мне кажется нормальным, так что, возможно, где-то есть код, который вызывает проблему.
Я скажу, что вы используете своего рода странная идиома. Вместо того, чтобы сохранять при создании и выпуске на установке, я бы сделал что-то вроде этого:
// new players will always be created autoreleased.
AVAudioPlayer *player = [[(AVAudioPlayer*) [AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error] autorelease];
- (void) setAudioPlayer : (AVAudioPlayer *) player
{
if (Player)
{
if ([Player isPlaying] || Repeat) // The indication was off???
[Player stop];
[Player release];
}
Player = [player retain];
}
Таким образом, вы сохраняете только объекты «player», когда они действительно поступают в ваш метод setAudioPlayer, что может облегчить отслеживание.
Также убедитесь, что утечка действительно происходит из-за объекта AVAudioPlayer. Инструменты должны иметь возможность проверить это за вас.
Вот способ создания AVAudioPlayer без утечки памяти. См. Эту страницу для объяснения .
Я подтвердил в своем приложении, что это на 100% устранило мои утечки AVAudioPlayer.
- (AVAudioPlayer *)audioPlayerWithContentsOfFile:(NSString *)path {
NSData *audioData = [NSData dataWithContentsOfFile:path];
AVAudioPlayer *player = [AVAudioPlayer alloc];
if([player initWithData:audioData error:NULL]) {
[player autorelease];
} else {
[player release];
player = nil;
}
return player;
}