我有两节课:
@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;
我正在将一个对象初始化为:
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",&glVIEw->framebuffer );
使用initWithFrame看起来像:
- (ID) initWithFrame:(CGRect)frame /* ... */{ if( ( self = [super initWithFrame:frame] ) ) { /* ... */ } NSLog(@"%s:%d &self %p\n",self ); NSLog(@"%s:%d &framebuffer %p\n",&framebuffer ); return self;}
日志显示:
EAGLVIEw.mm:399 self 0x134503e90EAGLVIEw.mm:401 &framebuffer 0x134503f68AppController.mm:277 glVIEw 0x134503e90AppController.mm:281 &glVIEw->framebuffer 0x134503f10解决方法 为什么不使用指针呢?保证地址是一样的.修改EAGLVIEw就好
@interface EAGLVIEw : UIVIEw { @public gluint *framebuffer; }
将framebuffer的地址打印出来:
NSLog(@"%s:%d &glVIEw->framebuffer %p\n",glVIEw->framebuffer );
在initWithFrame里面做类似的事情:
- (ID) initWithFrame:(CGRect)frame{ unsigned int fbo= opengl_get_framebuffer(); framebuffer = &fbo; NSLog(@"%s:%d &framebuffer %p\n",framebuffer );}
现在帧缓冲的地址应该是一样的!
总结以上是内存溢出为你收集整理的c – 当包含它的对象不在时,该成员变量的地址如何在objective-c中改变?全部内容,希望文章能够帮你解决c – 当包含它的对象不在时,该成员变量的地址如何在objective-c中改变?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)