xcode探测器不会检测我的应用程序中的泄漏

时间:2013-05-26 00:20:19

标签: iphone ios memory-leaks instruments cocos3d

我在以前的应用程序中使用仪器来检测泄漏时从未遇到任何问题,但出于某种原因,我无法检测到当前应用程序中的任何泄漏。我甚至创造了一些漏洞,试图让它做点什么。我已经尝试过我的应用程序作为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;
// }

这只是让我疯狂。我必须在这里丢失一些东西因为这没有意义。有人有任何建议吗?

1 个答案:

答案 0 :(得分:0)

我终于在探查器中检测到泄漏。我的问题是,我急于出现泄漏,我评论了我的viewController的发布。至少我认为就是这样。基本上我分配了一个viewController,在viewController中创建了一些泄漏,然后将其解散。在不调用release的情况下,viewController对象仍然有效(没有调用dealloc),因此没有泄漏。