title: NSNotification Observer Closure not removed when Observer is removed?
body: <p>I have the following code in a view controller to register for one of my custom notifications. I have used the selectors until now for registering but thought I would try the closures instead and noticed something weird.</p>
  
  <pre><code>NSNotificationCenter.defaultCenter().addObserver(self, selector: "notificationReceived:", name: "NotificationKey", object: nil)
  NSNotificationCenter.defaultCenter().addObserverForName("NotificationKey", object: nil, queue: nil) { [weak self] notification in
      NSLog("Notification received in closure!")
  }
  
  @objc private func notificationReceived(notification: NSNotification) {
      NSLog("Notification received!")
  }
  </code></pre>
  
  <p>I then remove the view controller as an observer.</p>
  
  <pre><code>NSNotificationCenter.defaultCenter().removeObserver(self)
  </code></pre>
  
  <p>Once the observer is removed, I still see the NSLog in the Closure, but I don't see the NSLog in the selector function. It appears the closure is being held onto by the notification center. I've also noticed the closure can cause a retain cycle if self is referenced within it (adding [weak self] fixes this, but the NSLog line is still called).</p>
  
  <p>Does anyone know why the closure is still handling the notification?</p>
  
  <p>Would there ever be a case where you would use the closure over the selector (I prefer them because it avoids magic strings)?</p>