У меня проблема при использовании pushViewController - из 9 МБ объем памяти увеличивается до 28 МБ, но использование popViewController не освобождает память (предполагается, что она составляет 9 МБ), но я получаю 28 МБ.
Ниже приведен код, который выдвигает представление.
/* Video Handler */
-(void)showVideo:(id)sender {
UIButton *btn = (UIButton *)sender;
int nid = btn.tag;
masterdb *mdbT = [[masterdb alloc] init];
izc_news *nclsT = [mdbT getNewsDetail:nid];
[mdbT release];
NSString *vlink = nclsT.VideoLink;
PlayVideo *vd = [[PlayVideo alloc] init];
vd.hidesBottomBarWhenPushed = YES;
vd.videoLink = vlink;
[self.navigationController pushViewController:vd animated:YES];
[vd release];
vd = nil;
}
Ниже приведен файл PlayVideo.h
#import <MediaPlayer/MediaPlayer.h>
@interface PlayVideo : UIViewController {
NSString *videoLink;
MPMoviePlayerController *mp;
UIActivityIndicatorView *spinner;
}
@property(nonatomic, retain) NSString *videoLink;
@property(nonatomic, retain) MPMoviePlayerController *mp;
@property(nonatomic, retain) UIActivityIndicatorView *spinner;
@end
и, наконец, ниже - файл PlayVideo.m
#import "PlayVideo.h"
@implementation PlayVideo
@synthesize videoLink;
@synthesize mp;
@synthesize spinner;
- (void) viewDidLoad {
[super viewDidLoad];
videoLink = @"http://www.izooconnect.com/fwzNew/vids/testVid.mov";
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[[self view] setBounds:CGRectMake(0, 0, 480, 320)];
[[self view] setCenter:CGPointMake(160, 240)];
[[self view] setTransform:CGAffineTransformMakeRotation(M_PI / 2)];
CGRect mainBounds = [[UIScreen mainScreen] bounds];
CGRect indicatorBounds = CGRectMake(mainBounds.size.height / 2 - 24, mainBounds.size.width / 2 - 24, 48, 48);
spinner = [[UIActivityIndicatorView alloc] initWithFrame:indicatorBounds];
spinner.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
spinner.tag = 1;
[spinner startAnimating];
[self.view addSubview:spinner];
mp = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString: videoLink]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePreloadDidFinish:)
name:MPMoviePlayerContentPreloadDidFinishNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:nil];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
[[mp view] setFrame:CGRectMake(0, 0, 480, 320)];
[mp setControlStyle:MPMovieControlStyleFullscreen];
[mp setFullscreen:YES];
[self.view addSubview:mp.view];
}
- (void) moviePreloadDidFinish: (NSNotification *) notification {
UIActivityIndicatorView *tmpimg = (UIActivityIndicatorView *)[self.view viewWithTag:1];
[tmpimg removeFromSuperview];
[mp play];
}
- (void) moviePlayBackDidFinish: (NSNotification *) notification {
[self.navigationController popViewControllerAnimated:YES];
}
- (void) dealloc {
[mp release];
[spinner release];
[super dealloc];
}
@end
Пытался найти проблему, но не смог ее найти.