메신저로 코코아가있는 Mac 용 비디오 레코더 응용 프로그램을 작성 중이며 메모리 사용에 큰 문제가 있습니다.Mac OSX 코코아 앱은 가비지 수집량이 많은 RAM을 가지고 있습니다.
앱을 실행하면보기를 변경할 수있는 버튼과 웹캠이로드되는 간단한 사용자 정의보기가있는 창이 있습니다. 이보기에는 21MB의 RAM이 필요합니다. 버튼 중 하나를 누르면 카메라에서 기록한 내용의 QTMovie로 사용자 정의보기가 변경됩니다.
내가보기를 바꿀 때마다 내 응용 프로그램이 upp를 약 10MB RAM으로 채우고 중지하지 않습니다. 가비지 컬렉션을 사용하고 있습니다. 비록 제가 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를 지켜 보면서 부하를 발생, 이것은 내가 그것을 표시 할 때마다 램 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없이 (누출이 없다고 가정하여) 실행 됨으로써 확인할 수 있습니까? 비디오의 크기에 따라 할당 크기가 합리적 일 수 있습니다. 인스트루먼트 (또는 유사한 도구)는 누가 이러한 호출을 생성 하는지를 알려줍니다. 디스크에서 비디오를 스트리밍하고 표시하는 데 필요한 총 30MB는 반드시 끔찍한 것은 아니며 조건에 따라 다릅니다. – justin
가비지 컬렉션을 해제하고 수동 메모리 관리를하지 않으면 뷰를 변경할 때 응용 프로그램이 충돌합니다. 일부 수동 dealloc을 수행하면 가비지 수집과 동일한 문제가 발생하는 것 같습니다. – tobros91