即時通訊編程爲mac與可可,並有一個巨大的內存使用問題的錄像機應用程序。Mac OSX可可應用程序需要大量RAM與垃圾回收
當啓動應用程序時,我有一個窗口有兩個按鈕,我可以更改視圖和一個簡單的自定義視圖,其中網絡攝像機加載。只是這個視圖需要21mb的RAM,當我按下其中一個按鈕時,我將自定義視圖更改爲從凸輪記錄的內容的QTMovie。
每當我改變看法我的應用程序用大約10mb的ram填充upp,並且永不停止。我有垃圾收集。即使我展示了QTMovie的視圖並且想要按下按鈕以再次顯示它,它也需要更多的內存。加載子視圖
代碼,從按鈕
if ([myCurrentViewController view] != nil)
[[myCurrentViewController view] removeFromSuperview];
NSViewController* cameraViewController2 = [[NSViewController alloc] initWithNibName:@"kVideo" bundle:nil];
if (cameraViewController2 != nil)
{
myCurrentViewController = cameraViewController2;
}
[myTargetView addSubview: [myCurrentViewController view]];
觸發而這正是該videoView負載時會發生什麼,而這需要RAM的10MB我希望它顯示每次。
-(void)playMovie
{
[movieView setMovie:nil];
NSString* moviePath = [NSBundle pathForResource:@"tempFile" ofType:@"mov" inDirectory:@"/Users/Shared/"];
QTMovie* movie = [[QTMovie alloc] initWithFile:moviePath error:nil];
[movieView setMovie:movie];
}
- (void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent3:) name:@"updateVideoPlayer" object:nil];
[self playMovie];
}
你可以通過運行沒有GC(也假設沒有泄漏),驗證它是否有垃圾收集的東西(或沒有)。取決於視頻的大小,分配大小可能是合理的。儀器(或類似工具)會指出誰在創建這些分配,哪些是在什麼呼叫中。從磁盤上傳輸和顯示視頻的總共30 MB並不一定很糟糕 - 這取決於條件。 – justin 2011-02-15 14:01:16
如果我關閉垃圾回收,並且不做任何手動內存管理,當我更改視圖時,應用程序崩潰,如果我執行一些手動dealloc,我似乎得到與剛發現的垃圾回收相同的問題。 – tobros91 2011-02-15 14:13:00