【问题标题】:xcode profiler doesn't detect leaks in my appxcode 探查器未检测到我的应用程序中的泄漏
【发布时间】:2013-05-21 05:51:24
【问题描述】:

我从来没有遇到过使用仪器检测我以前的应用程序中的泄漏的问题,但由于某种原因,我无法让它检测我当前应用程序中的任何泄漏。我什至创建了一些泄漏只是为了让它做一些事情。我已经将我的应用程序尝试为 ARC 和非 ARC,但这并没有改变任何东西。无论我做什么,都没有检测到泄漏。

顺便说一句,这是一个 cocos3d 应用程序;不是说这很重要吗??

我已经遵循 Ray 的教程 (http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode),在测试示例代码时,确实会导致检测到泄漏。我将有问题的代码复制到我的应用程序中,然后用模拟器和设备再次尝试,但仍然没有。这是我用来尝试创建泄漏的代码:

- (IBAction)rotateTapped:(id)sender {
    NSLog(@"settingsButtonPushed");

    UIImage *currentImage = _imageView.image;
    CGImageRef currentCGImage = currentImage.CGImage;

    CGSize originalSize = currentImage.size;
    CGSize rotatedSize = CGSizeMake(originalSize.height, originalSize.width);

    CGContextRef context = CGBitmapContextCreate(NULL,
                                                 rotatedSize.width,
                                                 rotatedSize.height,
                                                 CGImageGetBitsPerComponent(currentCGImage),
                                                 CGImageGetBitsPerPixel(currentCGImage) * rotatedSize.width,
                                                 CGImageGetColorSpace(currentCGImage),
                                                 CGImageGetBitmapInfo(currentCGImage));

    CGContextTranslateCTM(context, rotatedSize.width, 0.0f);
    CGContextRotateCTM(context, M_PI_2);
    CGContextDrawImage(context, (CGRect){.origin=CGPointZero, .size=originalSize}, currentCGImage);

    CGImageRef newCGImage = CGBitmapContextCreateImage(context);
    UIImage *newImage = [UIImage imageWithCGImage:newCGImage];

    self.imageView.image = newImage;
}

这是我的一些代码,我试图故意制造泄漏(多次调用):

// if (! self.robotViewController) {
    robotViewController = [[RobotViewController alloc] initWithNibName:@"RobotViewController" bundle:nil];
    self.robotViewController.glView = self.m_glView;
    self.robotViewController.delegate = self;
// }

在这一点上,这简直让我发疯。我必须在这里遗漏一些东西,因为这没有任何意义。有人有什么建议吗?

【问题讨论】:

    标签: iphone ios memory-leaks instruments cocos3d


    【解决方案1】:

    我终于在探查器中检测到了泄漏。我的问题是,在我急于使泄漏出现时,我注释掉了我的 viewController 的发布。至少我认为是这样。基本上我分配了一个 viewController,在 viewController 中创建了一些泄漏,然后将其关闭。如果不调用 release,viewController 对象仍然有效(没有调用 dealloc),因此没有泄漏。

    【讨论】:

      猜你喜欢
      • 2011-08-30
      • 1970-01-01
      • 2018-01-17
      • 2011-10-09
      • 2019-10-06
      • 1970-01-01
      • 2012-07-16
      • 2021-03-29
      • 2017-11-02
      相关资源
      最近更新 更多