텍스처는 Obj-c 런타임에서 처리하지 않으므로 누출은 그 텍스처에 대해 아무 것도 모릅니다. 다른 도구를 사용해야합니다.
Xcode에서 OpenGL 템플릿을 사용하여 새 프로젝트를 시작하십시오. 업데이트/장면을 그리는 방법을 검색하고 마지막에이 코드를 추가하는 코드 생성 및 OpenGL 명령을 사용하여 다섯 개 질감을 파괴
static int tick = -1;
static GLuint tex[5];
if (tick++ < 0)
for (int f = 0; f < 5; f++)
tex[f] = 0;
tick = tick % 5;
if (tex[tick]) {
glDeleteTextures(1, &tex[tick]);
tex[tick] = 0;
} else {
glGenTextures(1, &tex[tick]);
glBindTexture(GL_TEXTURE_2D, tex[tick]);
char *mem = malloc(1024 * 1024 * 4);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, mem);
free(mem);
}
합니다. 그것을 빌드하고 장치에서 한 번 실행하여 설치되었는지 확인하십시오. 괴롭히는 것에 대해 걱정하지 마십시오.
이제 악기를 열고 iPhone의 빈 템플릿으로 시작하십시오. 라이브러리를 열고 Memory Monitor를 창으로 드래그하십시오. 정보 공개 버튼을 클릭하고 "Physical Memory Free"이외의 모든 항목을 선택 취소하십시오. 이제 아이폰에서 바이너리를 실행하여 녹화를 시작하도록 선택하십시오. 인스 트루먼 테이션이 어플리케이션을 샘플링하려고 할 때마다 계단 패턴이 위/아래로 가야합니다. 프로그램이 실행되는 동안 실제 메모리 사용량을 보여주는 "실제 메모리"열과 함께 모든 활성 프로세스를 볼 수 있습니다.
내 테스트에서이 예제는 메모리 샘플링의 순간에 따라 25MB에서 3MB 사이를 소비합니다. 이것은 2 세대 iPhone 및 SDK 3.1입니다. 2.x SDK를 사용하는 경우 일반 OpenGL 모니터에서 GART Resident Object Size를 검색해야합니다. 자세한 내용은 http://blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/을 참조하십시오.
어쨌든 위아래로 점프하는 메모리는 glDeleteTexture()가 광고 한대로 작동한다는 것을 증명합니다.
이미 객체 지향적 인 방식으로 모든 작업을 수행했지만, 요점은 : 수동으로 텍스처를 확인할 수 있습니까? – Karl
다음은 순수하게 Open GL 관련 anylonger가 아닙니다. 텍스쳐 객체를 텍스쳐 객체로 참조한다면, 각각의 인스턴스화 된 텍스쳐 객체에 대해 증가시키는 전역 카운터를 생성하지 말고 삭제 된 텍스쳐마다 감소시켜야합니다. 그럼 하나의 변수를 계측하는 것보다 더 열심히 남아 ... –
글쎄, 내 자신의 이러한 glGenTextures 및 glDeleteTextures를 관리하지만, 사실이 있습니다 : 텍스처를 삭제하는 것이 성공 여부와 같은 함수에서 반환 된 것이 없기 때문에, 나는 아주 불안해한다. 24 MB는 압축 된 이미지를 모두 RAM으로 확장해야 할 때 매우 작습니다. 나는 염려해야하며 프로그램이 실제로 텍스처를 성공적으로 할당 해제했는지 여부를 알고 싶습니다. 나중에 텍스처가 할당 취소되지 않는다는 것을 나중에 알기를 원하지 않습니다. 당신은 내가 너무 많이 걱정한다고 생각할 수도 있지만, 기억은 매우 심각한 문제입니다. – Karl