<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "macCatalyst: -",
    "macOS: -",
    "tvOS: -",
    "visionOS: -",
    "watchOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "AVFoundation",
  "identifier" : "/documentation/AVFoundation/AVPlayer/removeTimeObserver(_:)",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "AVFoundation"
    ],
    "preciseIdentifier" : "c:objc(cs)AVPlayer(im)removeTimeObserver:"
  },
  "title" : "removeTimeObserver(_:)"
}
-->

# removeTimeObserver(_:)

Cancels a previously registered periodic or boundary time observer.

```
nonisolated func removeTimeObserver(_ observer: Any)
```

## Parameters

`observer`

An object returned by a previous call to [`addPeriodicTimeObserver(forInterval:queue:using:)`](/documentation/AVFoundation/AVPlayer/addPeriodicTimeObserver(forInterval:queue:using:)) or [`addBoundaryTimeObserver(forTimes:queue:using:)`](/documentation/AVFoundation/AVPlayer/addBoundaryTimeObserver(forTimes:queue:using:)).

## Discussion

Upon return, the caller is guaranteed that no new time observer blocks will begin executing. Depending on the calling thread and the queue used to add the time observer, an in-flight block may continue to execute after this method returns. You can guarantee synchronous time observer removal by enqueuing the call to `removeTimeObserver` on that queue. Alternatively, call `dispatch_sync(queue, ^{})` after `removeTimeObserver` to wait for any in-flight blocks to finish executing.

You should use this method to explicitly cancel each time observer added using [`addPeriodicTimeObserver(forInterval:queue:using:)`](/documentation/AVFoundation/AVPlayer/addPeriodicTimeObserver(forInterval:queue:using:)) and [`addBoundaryTimeObserver(forTimes:queue:using:)`](/documentation/AVFoundation/AVPlayer/addBoundaryTimeObserver(forTimes:queue:using:)).

The following shows a common implementation to remove a registered time observer:

```objc
- (void)removeBoundaryTimeObserver {
    if (self.timeObserverToken) {
        [self.player removeTimeObserver:self.timeObserverToken];
        self.timeObserverToken = nil;
    }
}
```

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)