Weird memory leak that drives me crazy!!!
OK here's a weird one!
this is the code:
开发者_如何学Go@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
Here is the situation: Drill down tableview app. select row. go into View1 with tableview with tableheaderview. tableheaderview got two buttons. button1 takes you to the view with the described code above. button2 takes you to a view with exact similar code!
If i call the first button1 and return to the View1 and back to initial view NO LEAKS If i select another row, go to View1 and select button1 and back to initial view NO LEAKS 3rd time lucky!!Do the same exact thing as above GOT LEAKS!!!
WHY????
Senario 2 select row go to View1 select button1 go to view with code above, back, select button2 go to view with exact code as above GOT LEAKS!!! drives me crazy!!!!
HELP???
You're doing a cardinal sin here: the overriding of the view
property in viewDidLoad
The only place you are allowed to set the view
property of a view controller, is in loadView
. The default implementation will check for a nib with the same name as the view controller class, and create a simple white view if it can't find a nib. You can override it to create your own view. Don't call [super loadView]
in it.
Make sure you only create that one view in loadView
, though, and create additional subviews in viewDidLoad
.
Also, you may find [UIScreen mainScreen].applicationFrame
useful for setting the frame in your custom loadView
implementation.
精彩评论