---
title: "removeObserver(_:forKeyPath:context:)"
framework: objectivec
role: symbol
role_heading: Instance Method
path: "objectivec/nsobject-swift.class/removeobserver(_:forkeypath:context:)"
---

# removeObserver(_:forKeyPath:context:)

Stops the observer object from receiving change notifications for the property specified by the key path relative to the object receiving this message, given the context.

## Declaration

```swift
func removeObserver(_ observer: NSObject, forKeyPath keyPath: String, context: UnsafeMutableRawPointer?)
```

## Parameters

- `observer`: The object to remove as an observer.
- `keyPath`: A key-path, relative to the observed object, for which observer is registered to receive KVO change notifications.
- `context`: Arbitrary data that more specifically identifies the observer to be removed.

## Discussion

Discussion Examining the value in context you are able to determine precisely which addObserver(_:forKeyPath:options:context:) invocation was used to create the observation relationship. When the same observer is registered for the same key-path multiple times, but with different context pointers, an application can determine specifically which object to stop observing. It is an error to call removeObserver(_:forKeyPath:context:) if the object has not been registered as an observer. Be sure to invoke this method (or removeObserver(_:forKeyPath:)) before any object specified in addObserver(_:forKeyPath:options:context:) is deallocated.

## See Also

### Registering for Observation

- [addObserver(_:forKeyPath:options:context:)](objectivec/nsobject-swift.class/addobserver(_:forkeypath:options:context:).md)
- [removeObserver(_:forKeyPath:)](objectivec/nsobject-swift.class/removeobserver(_:forkeypath:).md)
