2016-11-07 2 views

답변

4

에서 참조 된이 코드를 확인 엑스 코드 8.1, 스위프트 3을 사용하고 있습니다 허용 된 답은 로컬 변수에 반환 값을 할당하고 무시할 수 있다고 생각합니다. 그러나 doc에 따르면 반환 값에 대한 강력한 참조를 보유하고 실제로 removeTimeObserver(_ :)을 보유하는 것이 중요합니다.

플레이어가 시간 옵저버를 호출하기를 원하면 반환 값을 강력하게 유지해야합니다. 이 메소드를 호출 할 때마다 removeTimeObserver (:) 에 대한 호출과 쌍을 이루어야합니다. removeTimeObserver ( :) 을 호출하지 않고 관찰자 객체를 해제하면 정의되지 않은 동작이 발생합니다.

그래서 내가 할 것이다 :

if let ob = self.observer { 
    player. removeTimeObserver(ob) 
} 

let interval = CMTimeMake(1, 4) // 0.25 (1/4) seconds 
self.observer = player.addPeriodicTimeObserver(forInterval: interval, queue: DispatchQueue.main) { [weak self] time in 
    ... 
} 
관련 문제