我EXC_BAD_ACCESS
在尝试停止正在播放的视频时遇到了一些问题MPMoviePlayerController
。这是一些代码:
视频类:
@interface MyVideo()
@property (nonatomic, strong) MPMoviePlayerController * videoController
@end
@implementation MyVideo
@synthesize videoController;
- (MyVideo*) initIntoView: (UIView*) view withContent (NSDictionary*) contentDict {
self=[super init];
NSString * rawUrl=[[NSString alloc] initWithFormat:@"http://.../%@.mp4", [contentDict objectForKey:@"filename"]];
NSURL * videoUrl=[[NSURL alloc] initWithString:rawUrl];
videoController = [[MPMoviePlayerController alloc] initWithContentURL:videoUrl];
videoController.movieSourceType=MPMovieSourceTypeFile;
videoController.view.frame = viewRef.bounds;
[videoController.view setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
videoController.controlStyle=MPMovieControlStyleNone;
[view addSubview:videoController.view];
return self;
}
/* other code */
- (void) stop {
NSLog(@"video stop");
[videoController stop];
}
@end
这个MyVideo
类是我AppDelegate
类中的一个属性,如下所示:
@property (nonatomic, strong) MyVideo video;
我AppDelegate
班级中的一行触发了此类的公共方法停止MyVideo
,如下所示:
[video stop];
这通常工作正常。但有时我会EXC_BAD_ACCESS
在[videoController stop]
. 它前面的那一行,上面的那一行,NSLog
按预期输出到控制台。
此崩溃发生在已加载到其中的视频videoController
仍在播放时。但它并非每次都发生。
谁能建议为什么会发生这种崩溃?我怀疑它是因为videoController
它不再在内存中,尽管它strong
仍在使用中。
我是否认为绝对没有办法测试 videoController 以查看它是否仍在内存中?
我是否认为绝对没有办法强制 videoController 在用于播放视频时留在内存中?
因此,当我不想再播放视频时,与其尝试停止视频并正确关闭MyVideo
课程,我现在正在考虑将MyVideo
课程设置为零,并让 ARC 处理停止视频并将其从内存中清除。这是这样做的正确方法吗?这样做会有什么缺点吗?
我缺少这个问题的其他解决方案吗?