0
私はゲームで永久的なループを持つフルスクリーンビデオを再生します(バックグラウンド用)。それはうまく動作しますが、私はビューを変更するとき、私はこのコードにインスツルメントで特定されたメモリリークが(メモリーテンプレートをリーク)を取得:私は次のコードで私の見解を変更したときに呼ばれる小さなクリーニング機能を作成しているスウィフトiOS:次のコード(ビデオプレーヤー)のメモリリーク
urlStr = NSBundle.mainBundle().pathForResource("Video_Socle", ofType: "mov")
let url = NSURL(fileURLWithPath: urlStr!)
player = AVPlayer(URL: url)
NSNotificationCenter.defaultCenter().addObserverForName(AVPlayerItemDidPlayToEndTimeNotification, object: player!.currentItem, queue: nil)
{ notification in
let t1 = CMTimeMake(5, 100);
self.player!.seekToTime(t1)
self.player!.play()
}
videoNode = SKVideoNode(AVPlayer: player!)
videoNode!.anchorPoint = CGPointMake (0,0)
videoNode!.size = CGSize(width: 2048, height: 1536)
videoNode!.zPosition = 0
background.addChild(videoNode!)
if synch == false { video_synchronization()
}
videoNode!.play()
:
NSNotificationCenter.defaultCenter().removeObserver(self)
player = nil
videoNode = nil
background.removeAllActions()
background.removeAllChildren()
let transition = SKTransition.revealWithDirection(.Right, duration: 2)
let nextScene = MainView(size: scene!.size)
nextScene.scaleMode = .AspectFill
scene?.view?.presentScene(nextScene, transition: transition)
self.viewController?.dismissViewControllerAnimated(true, completion: nil)
AVPlayerとSKVideoNodeで識別されるメモリリークが発生します。私は一部を削除すると奇妙な何かが漏れがdisapearされています。私はこのコードで
NSNotificationCenter.defaultCenter().addObserverForName(AVPlayerItemDidPlayToEndTimeNotification, object: player!.currentItem, queue: nil)
{ notification in
let t1 = CMTimeMake(5, 100);
self.player!.seekToTime(t1)
self.player!.play()
}
何をしないのですか?ありがとう!
ありがとう、私はそれを知らなかった。私はあなたのラインを画面遷移の直前に追加しました。私のクリーニング機能では黒い画面が表示されます。どこに置く必要があります:view.removeFromSuperView() – PGibouin
次回同じ画面に戻ると、addsubView()と同じものが必要になります。つまり、viewWillAppear()メソッドでplayerViewを追加する必要があります。 superviewから削除すると、viewWillDisappear()に配置する必要があります。 – JAck
同じようにSKVideoNodeをループさせようとすると、ビューを変更せずにメモリリークが発生します。 –