0

我从来没有遇到过使用仪器检测我以前的应用程序中的泄漏的问题,但由于某种原因,我无法用它来检测我当前应用程序中的任何泄漏。我什至创建了一些泄漏只是为了让它做一些事情。我已经将我的应用程序尝试为 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;
// }

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

4

1 回答 1

0

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

于 2013-05-26T12:18:08.340 回答