作者lab0424 (刻骨铭心...)
看板MacDev
标题[问题] MPMoviePlayerController Leak!!!
时间Tue Aug 23 18:50:50 2011
大大们好~
这里有个leak问题想问问看有没有大大知道的
程式简易关键代码:
mp = [[MPMoviePlayerController alloc] initWithContentURL:strurl];
[mp setControlStyle:MPMovieControlStyleDefault];
[mp prepareToPlay];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayerLoadStateChanged:)
name:MPMoviePlayerLoadStateDidChangeNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:nil];
=====> 然後在moviePlayerLoadStateChanged里面
[mp play];
=====> 而moviePlayBackDidFinish里面执行
if (mp)
{
[mp pause];
mp.initialPlaybackTime = -1;
[mp stop];
mp.initialPlaybackTime = -1;
[mp release];
mp = nil;
}
一旦关闭正在播放的影片,於是执行到moviePlayBackDidFinish中
但却发现:
if (mp)
{
NSLog(@"test(0) mp retain count=%d", [mp retainCount]); //=>retain count是1
[mp pause];
NSLog(@"test(1) mp retain count=%d", [mp retainCount]); //=>retain count是2
mp.initialPlaybackTime = -1;
[mp stop];
NSLog(@"test(2) mp retain count=%d", [mp retainCount]); //=>retain count是5
mp.initialPlaybackTime = -1;
[mp release];
mp = nil;
}
想问问有大大们
(1)为什麽执行pause时, retain count从1变成2, 而执行stop时retain count从2变成5
(2)怎麽样可以避免这个leak
感谢大大们关注!!!
感谢!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.161.28
1F:→ yllan:正常状况下你用不到 retainCount. 这也不代表他 leak 08/23 21:09
2F:→ lab0424:因为观察Instruments里面的activity monitor发现leak 08/23 23:33
3F:→ lab0424:每次播影片会上升1M多的记忆体用量, 然而都没下降下来! 08/23 23:34
4F:→ lab0424:所以才开始观察member的retain count 08/23 23:35
5F:推 offname:在实机上用 intrument 找一下 leak 没有的话可以暂时不管 08/24 07:19
6F:→ zonble:先跑一下 Build and Analyze 吧 08/24 10:55
7F:→ zonble:Retain Count 增加不代表 Memory Leak 08/24 10:56
8F:→ zonble:先检查一下会不会是漏在其他地方 08/24 10:56