ipad检漏仪分析中存在的问题

ipad检漏仪分析中存在的问题,ipad,memory-leaks,xcode-instruments,Ipad,Memory Leaks,Xcode Instruments,我是第一次使用检漏仪。 我的代码中有两个漏洞,当我看到源代码时,它显示在这两个粗体的语句中 - (id) initWithFrame: (CGRect) frame { [self LoadMoviePlayer]; **self= [super initWithFrame:frame];** if (self==[super initWithFrame:frame]) { CAEAGLLayer* eaglLayer = (CAEAGLLa

我是第一次使用检漏仪。 我的代码中有两个漏洞,当我看到源代码时,它显示在这两个粗体的语句中

- (id) initWithFrame: (CGRect) frame
{
    [self LoadMoviePlayer];

    **self= [super initWithFrame:frame];**  
    if (self==[super initWithFrame:frame])
    {
        CAEAGLLayer* eaglLayer = (CAEAGLLayer*) self.layer;
        eaglLayer.opaque = YES;

- (void) applicationDidFinishLaunching: (UIApplication*) application
{
    CGRect screenBounds = [[UIScreen mainScreen] bounds];

    m_window = [[UIWindow alloc] initWithFrame: screenBounds];
    **m_view = [[GLView alloc] initWithFrame: screenBounds];**

    [m_window addSubview: m_view];
    [m_window makeKeyAndVisible];
}

不知道下一步如何解决问题。

据我所知,第一次泄漏发生在您在未初始化的init中执行代码时(您的
[super initWithFrame:
发生在您的
[self-loadMoviePlayer]
之后),第二次,乍一看,似乎是m_视图被分配,但没有被释放,您可以使用以下方法解决此问题:

CGRect screenBounds = [[UIScreen mainScreen] bounds];

m_window = [[UIWindow alloc] initWithFrame: screenBounds];
m_view = [[GLView alloc] initWithFrame: screenBounds];

[m_window addSubview: m_view];
[m_view release];
[m_window makeKeyAndVisible];

这应该是可行的,因为m_视图已经被添加到窗口中(因此被保留)。

我正在dealloc函数中释放m_视图,我不知道为什么,但是当我注释“self=[super initWithFrame:frame];”行时,问题就解决了。我已经检查了self值,在调用self.loadmoviePlayer时它不为null,任何人都知道我的问题。m_视图的分配将其保留计数设置为1,窗口的addSubView将其设置为2。组件的dealloc会将其释放为1,但只要您不将其从窗口中移除或不释放窗口,其保留计数将保持为1。此外。。loadMoviePlayer行背后的思想是:准确地说,在if()块中执行[super initWithFrame:]之后再执行。如果您在尚未完全初始化的对象中创建对象实例(这正是您在此处所做的),则行为的定义主要是“您不想这样做”。您已经在if()块中设置了层的属性,为什么不在if()块中加载电影播放器呢?