c – 当包含它的对象不在时,该成员变量的地址如何在objective-c中改变?

c – 当包含它的对象不在时,该成员变量的地址如何在objective-c中改变?,第1张

概述我一直试图解决这个问题一段时间,但无法弄清楚它为什么会发生.它似乎只发生在“存档”应用程序并在设备上运行时,而不是在调试应用程序时. 我有两节课: @interface AppController : NSObject <UIApplicationDelegate>{ EAGLView * glView; // A view for OpenGL ES rendering}@in 我一直试图解决这个问题一段时间,但无法弄清楚它为什么会发生.它似乎只发生在“存档”应用程序并在设备上运行时,而不是在调试应用程序时.

我有两节课:

@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中改变?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1004746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存