0

我試圖檢查我的儀器中的應用程序內存問題。當我加載應用程序時,我會播放一些聲音並在UIImageView中顯示一些動畫。 爲了節省一些內存,我只在需要時才加載聲音,當我停止播放時,我將它從內存中釋放。內存問題 - 生活與整體 - >應用程序被殺

問題1:

我的應用程序正在使用大約生活內存5.5MB。但總體部分在開始到20MB之後正在增長,然後它正在緩慢增長(大約100kB /秒)。但是,負責圖書館的OpenAL(OAL ::緩衝區),使dyld(_dyld_start)-I我不知道這真的是,和一些其他的東西像ft_mem_qrealloc,CGFontStrikeSetValue,...

問題2:

當整體節大約30MB,應用程序崩潰(被殺害)。 根據我已經讀過的有關整體內存的事實,這意味着我的所有分配和釋放約爲30MB。但我真的不明白這個問題。當我需要一些聲音例如我加載它的內存,當我不再需要它時,我釋放它。但是這意味着當我加載1MB聲音時,此操作會增加2MB的整體內存使用量。我對嗎?當我加載10個聲音時,我的應用程序崩潰,只是因爲我的整體過高甚至生活的事實仍然很低? 我對此很困惑。

有人可以幫我清除它嗎?

(我在iOS 5和使用ARC)

一些代碼:

創造聲音的OpenAL:

MYOpenALSound *sound = [[MyOpenALSound alloc] initWithSoundFile:filename willRepeat:NO]; 

if(!sound) 
    return; 

[soundDictionary addObject:sound]; 

播放:

[sound play]; 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, ((sound.duration * sound.pitch) + 0.1) * NSEC_PER_SEC), dispatch_get_current_queue(), ^{ 
[soundDictionary removeObjectForKey:[NSNumber numberWithInt:soundID]]; 
    }); 
} 

創建與聲音AVAudioPlayer:

[musics replaceObjectAtIndex:ID_MUSIC_MAP withObject:[[Music alloc] initWithFilename:@"mapMusic.mp3" andWillRepeat:YES]]; 

pom = [musics objectAtIndex:musicID]; 
[pom playMusic]; 

,並停止和釋放它:

[musics replaceObjectAtIndex:ID_MUSIC_MAP withObject:[NSNull null]]; 

和圖像動畫: 我加載從大的PNG文件中的圖像(這也realated到我的其他話題:https://stackoverflow.com/questions/12223714/memory-warning-uiimageview-and-its-animations) 我有幾個的UIImageViews和時間我設置動畫陣列來播放動畫...

UIImage *source = [[UIImage alloc] initWithCGImage:[[UIImage imageNamed:@"imageSource.png"] CGImage]]; 

cutRect = CGRectMake(0*dimForImg.width,1*dimForImg.height,dimForImg.width,dimForImg.height); 
image1 = [[UIImage alloc] initWithCGImage:CGImageCreateWithImageInRect([source CGImage], cutRect)]; 
cutRect = CGRectMake(1*dimForImg.width,1*dimForImg.height,dimForImg.width,dimForImg.height); 
... 
image12 = [[UIImage alloc] initWithCGImage:CGImageCreateWithImageInRect([source CGImage], cutRect)]; 

NSArray *images = [[NSArray alloc] initWithObjects:image1, image2, image3, image4, image5, image6, image7, image8, image9, image10, image11, image12, image12, image12, nil]; 

,這陣我只是用簡單的喜歡:

myUIImageView.animationImages = images, ... duration -> startAnimating 
+0

分享一些代碼花花公子 – AppHandwerker

回答

1

刪除內存泄漏的建議:

1)使用ARC的iOS5功能。

2)此外結帳使用this

希望項目中的內存泄漏這有助於

+0

1,是的。這個項目已經在使用ARC了。 2,謝謝。它幫助我找到了CGImageRef及其CGImageRelease的一些問題。但它並沒有幫助我發現不斷增長的整體內存,或者如果問題出在整體或其他地方...... :( – D33

+0

** Xcode中的**分析**可以幫助您指出所有與代碼相關的內存泄漏,並且不僅CGImageRelease和CGImageRef –

+0

是的,我知道,實際上它只顯示了CGImageRef問題,很少有從未使用過的變量等等,不是我的代碼中的一個大問題,有沒有我應該啓用的選項或者什麼?進入產品 - >分析,並在左側面板中查看藍色問題(或代碼中藍色突出顯示的行),並修復了所有問題,但我的「整體內存」仍然在增加,我認爲這是由於我的UIImageView動畫 - 我正在切換UIImageView動畫數組,有沒有+「數量的」保存「圖像動畫幀數(或內存大小)? – D33

0

MYOpenALSound *聲音= [[MyOpenALSound的alloc] initWithSoundFile:文件名willRepeat:NO];

你永遠不會釋放這個。您的分配保留計數爲1。

調用替換數組中的in或將數組索引設置爲NSNull, 不釋放該對象。

您必須針對要存儲的聲音的每個實例調用釋放。

+0

但我在這個項目上使用ARC - >所以如果你的意思是使用[聲音發佈] ,我認爲在ARC下是不允許的它是正確的還是你在談論別的? – D33

相關問題