奇怪的内存泄漏让我发疯!

时间:2011-07-30 13:33:47

标签: iphone memory memory-leaks sdk

好的,这是一个奇怪的!

这是代码:

@synthesize imageViewX,myScrollViewX;

- (void)viewDidLoad {



    imageViewX = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    imageViewX.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    imageViewX.contentMode = UIViewContentModeScaleAspectFit;
    imageViewX.backgroundColor = [UIColor clearColor];

    //self.view = imageView;
    myScrollViewX.contentSize = CGSizeMake(imageViewX.frame.size.width, imageViewX.frame.size.height);
    myScrollViewX.backgroundColor = [UIColor blackColor];
    myScrollViewX.maximumZoomScale = 4.0;
    myScrollViewX.minimumZoomScale = 1.0;
    myScrollViewX.clipsToBounds = YES;
    myScrollViewX.delegate = self;

    CGPoint scrollCenter = [myScrollViewX center];
    [imageViewX setCenter:CGPointMake(scrollCenter.x,
                                     scrollCenter.y )];


    [myScrollViewX addSubview:imageViewX];

    self.view = myScrollViewX;
    [myScrollViewX autorelease];

}

- (void)viewWillAppear:(BOOL)animated {
    imageViewX.image = [stm.image valueForKey:@"image"];

}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return imageViewX;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}


- (void)dealloc {
    [super dealloc];
    [imageViewX release];
    [xray release];


}


@end

情况如下: 深入查看tableview应用程序。 选择行。 使用tableheaderview进入带有tableview的View1。 tableheaderview有两个按钮。 button1将您带到上面描述的代码的视图。 button2带您进入具有完全相似代码的视图!

如果我调用第一个按钮1并返回到View1并返回初始视图NO LEAKS 如果我选择另一行,请转到View1并选择button1并返回初始视图NO LEAKS 第3次幸运!!做同上面的GOT LEAKS !!!

WHY ????

Senario 2选择行转到View1选择button1转到上面的代码查看,返回, 选择按钮2去查看具有上面的确切代码GOT LEAKS !!! 让我疯狂!!!!

HELP ???

1 个答案:

答案 0 :(得分:0)

你在这里犯了一个重大罪恶:覆盖view

中的viewDidLoad财产

允许您设置视图控制器的view属性的唯一位置是loadView。默认实现将检查与视图控制器类同名的nib,如果找不到nib,则创建一个简单的白色视图。您可以覆盖它以创建自己的视图。 不要在其中调用[super loadView]

请确保您只在loadView中创建了一个视图,并在viewDidLoad中创建了其他子视图。

此外,您可能会发现[UIScreen mainScreen].applicationFrame对于在自定义loadView实施中设置框架非常有用。