[英]Memory not released in iPhone app
I am having problem when I use pushViewController - Memory goes to 28 MB from 9 MB, but using popViewController does not releases the memory (supposed to become 9 MB) but I am getting 28 MB. 我在使用pushViewController时遇到问题-内存从9 MB增至28 MB,但是使用popViewController不会释放内存(假定变为9 MB),但我却获得了28 MB。
Below is the code that pushes the view. 下面是推送视图的代码。
/* 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;
}
Below is the PlayVideo.h file 以下是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
and finally below is the PlayVideo.m file 最后是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
Tried to locate the problem but failed to find any. 试图查找问题,但未找到任何问题。
Your problem is here 你的问题在这里
- (void) moviePlayBackDidFinish: (NSNotification *) notification {
mp = nil;
[self.navigationController popViewControllerAnimated:YES];
}
you are setting mp = nil without releasing it and when you release in dealloc, it sends the message to nil and not to the actual instance of mp. 您正在设置mp = nil而不释放它,并且在dealloc中释放时,它将消息发送到nil而不是实际的mp实例。
release mp and then set it to nil. 释放mp,然后将其设置为nil。
The dealloc method is not called if any of the references held by a viewcontroller are still in memory. 如果视图控制器保存的任何引用仍在内存中,则不会调用dealloc方法。 so you need to release your mp object before popping up the view controller .. refer to this post for more info.... iPhone - when is dealloc for a viewcontroller called?
因此,您需要在弹出视图控制器之前释放mp对象..有关更多信息,请参阅此文章。... iPhone-什么时候为视图控制器调用dealloc?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.