initWithCoder :에서 초기화되는 메모리가 있습니다. initWithCoder의 "return self"부분 전에 메모리가 초기화되었는지 확인할 수 있습니다.initWithCoder에서 초기화 된 메모리가 drawView에서 손실됩니다.
나는의 malloc을 사용하여 메모리를 할당하고 사용자 정의 기능을 사용하여 입력 :
// in initWithCoder:
fontTexCoords = (GLfloat *)malloc(10 * 8 * sizeof(GLfloat));
[fontInfo textureCoordinatesToArray:fontTexCoords];
NSLog(@"%f", fontTexCoords[0]); // correctly outputs 1.0
하지만, 내 드로잉 루틴에 그 메모리의 내용이 제로가 된 것 같다을 :
// in drawView
NSLog(@"%f", fontTexCoords[0]); // incorrectly outputs 0.0
나는 응용 프로그램의 다른 장소에서 메모리를 만지지 않습니다.
질문 : 모든 데이터가 손실되는 이유는 무엇입니까? initWithCoder와 drawView 사이의 어떤 프로세스가 내 malloc 된 메모리에 이상한 일을하고 있습니까?
편집 :
NSLog 사용 initWithCoder의 제 8 플로트의 출력 (@ "initWithCoder % @ %의 X %의 f를"자기, fontTexCoords, fontTexCoords [0 ~ 8]);
2009-08-22 21:25:15.220 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.221 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 1.000000
2009-08-22 21:25:15.222 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.223 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000
2009-08-22 21:25:15.223 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000
2009-08-22 21:25:15.224 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000
2009-08-22 21:25:15.224 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.500000
2009-08-22 21:25:15.224 Memory[32706:20b] initWithCoder: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 1.000000
NSLog를 사용 drawView로부터의 출력 (@ "drawView %의 @ %의 X %의 F의"자기, fontTexCoords, fontTexCoords [0 8-]);
2009-08-22 21:25:15.399 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.399 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.400 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.401 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.403 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.404 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.404 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
2009-08-22 21:25:15.405 Memory[32706:20b] drawView: <EAGLView: 0xd19060; frame = (0 0; 320 480); autoresize = W+H; layer = <CAEAGLLayer: 0xd1b300>> D53110 0.000000
감사
마지막으로 한가지,? 'NSLog (@ "% @ % X % f", self, fontTexCoords, fontTexCoords [0]); ' – Jason
내 편집을 참조하십시오. 영점 조정이 무작위 인 것 같습니다. 때로는 임의 값을 가진 부동 소수점을 손상시킵니다. 뭔가가 어떻게 든 메모리를 덮어 씁니다. 나는 그것이 나이라고 생각하지 않는다, 이것은 내가 사용하고있는 유일한 비 objc 메모리이다. dealloc 메서드에서이 메모리 만 해제합니다. – rein
내 문제가 발견되었습니다 ... 내 대답은 아래 참조하십시오. 도움을 주신 Jason에게 감사드립니다. – rein