2016-08-09 9 views
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() 
} 

何をしないのですか?ありがとう!

答えて

0

あなたは次のことを行う必要があるビューを変更している..あなたは、あなたがビデオを再生されているすべてのビューを持っている場合は

が..あなたはそれを削除する必要があります。

view.removeFromSuperView()

+0

ありがとう、私はそれを知らなかった。私はあなたのラインを画面遷移の直前に追加しました。私のクリーニング機能では黒い画面が表示されます。どこに置く必要があります:view.removeFromSuperView() – PGibouin

+0

次回同じ画面に戻ると、addsubView()と同じものが必要になります。つまり、viewWillAppear()メソッドでplayerViewを追加する必要があります。 superviewから削除すると、viewWillDisappear()に配置する必要があります。 – JAck

+0

同じようにSKVideoNodeをループさせようとすると、ビューを変更せずにメモリリークが発生します。 –

関連する問題