現在CustomViewでAVPayerを使って動画を流しているのですが、
addPeriodicTimeObserverForIntervalこのメソッドのところを記述してから遷移してもメモリが破棄されなくなってしまいました。何が原因なのでしょうか?
swift
1class CustomView { 2var player: AVPlayer! 3@IBOutlet weak var slider: UISlider! 4private var token: dispatch_once_t = 0 5 6func setPlayer() { 7 if let url = NSURL(string: ("動画URL")!) { 8 let player = AVPlayer(URL: url) 9 let playerlayer = AVPlayerLayer(player: player) 10 self.player = player 11 playerlayer.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.rame.height) 12 self.layer.addSublayer(playerLayer) 13 player.play() 14 playerlayer.addSublayer(slider.layer) 15 } 16} 17 18func setSlider() { 19 slider.value = 0 20 slider.minimumValue = 0 21 slider.maximumValue = 60 22 let interval : Double = Double(0.5 * slider.maximumValue) / Double(slider.bounds.maxX) 23 let time : CMTime = CMTimeMakeWithSeconds(interval, Int32(NSEC_PER_SEC)) 24 player?.addPeriodicTimeObserverForInterval(time, queue: dispatch_get_main_queue()) { (time) -> Void in 25 let time = CMTimeGetSeconds(self.player!.currentTime()) 26 let value = Float(self.slider.maximumValue - self.slider.minimumValue) * Float(time) / Float(60) + Float(self.slider.minimumValue) 27 self.finish(time) 28 self.slider.value = value self.timeLabel.text = "0:0\(Int(time)) 29 } 30} 31 32 func finish(time: Float64) { 33 if time >= Float64(60) { 34 dispatch_once(&self.token) { 35 self.player?.pause() 36 self.player?.seekToTime(CMTimeMakeWithSeconds(0, Int32(NSEC_PER_SEC))) 37 } 38 } 39 } 40}
1分たったら、動画を止めるメソッドです。
addPeriodicTimeObserverForIntervalの中のBlocksは質問に書かれているようにカラなのでしょうか?また、「メモリが破棄されない」と思った根拠を書いてください。
Blocks内で、
let time = CMTimeGetSeconds(self.player!.currentTime())
let value = Float(self.slider.maximumValue - self.slider.minimumValue) * Float(time) / Float(10) + Float(self.slider.minimumValue)
self.finish(time)
self.slider.value = value
self.timeLabel.text = "0:0\(Int(time))"
動画の現在時間を取得して、ラベルのテキストに表示しています。
xcodeの左側のmenubarの
CPUをみるところで、Memoryが動画を再生するたびに増えていきます。
self.finishは何をしているのでしょうか?コードを教えて下さい。(コードは質問内に追記して下さい。ここに書かれると見難いです)
追記しました!
こちらで症状を再現させてから調べようと思っていましたが、情報を出していただくたびに不明点が出てくる状態で、これではキリがないので対応を中止します。他の方からの回答をお待ち下さい。
わかりました。ご丁寧な対応ありがとございました。