我正在使用SKVideoNode播放循环播放的短视频片段(大约10秒钟)。视频只有几MB。我没有做任何特别的事情,但RAM的使用量每5秒增加2-3MB。当我注释掉添加孩子时,内存泄漏就会停止,所以我知道它与这个类有关。我在网上找不到任何理由为什么这个简单的代码导致了这样的内存泄漏以及我可以做些什么,因为这段代码似乎非常标准。
以下是整个班级:
import SpriteKit
import AVFoundation
class BackgroundVideo:SKSpriteNode {
var playerItem:AVPlayerItem?
var player:AVPlayer?
var videoNode:SKVideoNode?
init() {
super.init(texture: nil, color: NSColor.clearColor(), size: CGSize(width: 1920, height: 1080))
let urlStr = getDocumentsDirectory() + "/videos/sample.mp4"
let url = NSURL(fileURLWithPath: urlStr)
let asset = AVURLAsset(URL: url, options: nil)
playerItem = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: playerItem!)
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "playerItemDidReachEnd:",
name: AVPlayerItemDidPlayToEndTimeNotification,
object: self.player?.currentItem)
videoNode = SKVideoNode(AVPlayer: player!)
videoNode?.position = CGPointMake(self.size.width/2, self.size.height/2)
self.addChild(videoNode!)
videoNode?.play()
}
func playerItemDidReachEnd(notification: NSNotification) {
self.player?.seekToTime(kCMTimeZero)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func getDocumentsDirectory() -> String {
return NSHomeDirectory() + "/Desktop/Data"
}
}
它似乎也与循环无关。如果我关闭循环,mem泄漏仍然会发生。唯一可以防止发生内存泄漏的事情是评论self.addChild(videoNode!)