4
我一直在試圖解決這個問題一段時間,並不能解決它爲什麼發生。這似乎只發生在「歸檔」應用程序並在設備上運行時,而不是在調試應用程序時發生。當包含它的對象不可用時,該成員變量的地址如何在objective-c中更改?
我有兩個類:
@interface AppController : NSObject <UIApplicationDelegate>
{
EAGLView * glView; // A view for OpenGL ES rendering
}
@interface EAGLView : UIView
{
@public
GLuint framebuffer;
}
- (id) initWithFrame:(CGRect)frame pixelFormat:(NSString*)fformat depthFormat:(GLuint)depth stencilFormat:(GLuint)stencil preserveBackbuffer:(bool)retained scale:(float)fscale msaaMaxSamples:(GLuint)maxSamples;
,我intitializing一個對象像這樣:
glView = [ EAGLView alloc ];
glView = [ glView initWithFrame:rect pixelFormat:strColourFormat depthFormat:iDepthFormat stencilFormat:iStencilFormat preserveBackbuffer:NO scale:scale msaaMaxSamples:iMSAA ];
NSLog(@"%s:%d &glView %p\n", __FILE__, __LINE__, glView);
NSLog(@"%s:%d &glView->framebuffer %p\n", __FILE__, __LINE__, &glView->framebuffer);
隨着initWithFrame看起來像:
- (id) initWithFrame:(CGRect)frame
/* ... */
{
if((self = [super initWithFrame:frame]))
{
/* ... */
}
NSLog(@"%s:%d &self %p\n", __FILE__, __LINE__, self);
NSLog(@"%s:%d &framebuffer %p\n", __FILE__, __LINE__, &framebuffer);
return self;
}
日誌顯示:
EAGLView.mm:399 self 0x134503e90
EAGLView.mm:401 &framebuffer 0x134503f68
AppController.mm:277 glView 0x134503e90
AppController.mm:281 &glView->framebuffer 0x134503f10
當包含它的對象不存在時,這個成員變量的地址如何改變?
當yu打印它時,是否在init方法中分配了framebuffer? –
framebuffer只是一個unsigned int成員,我不認爲我需要「分配」它嗎? – ashleysmithgpu
不,可能只是iOS映射這些變量的一種方式,我認爲很難找到「正確」的解釋 –